0
아래는 나의 사용 사례입니다.더 빠른 atomic_compare_and_swap 또는 spin trylock은 어느 것입니까?
전역 변수가 하나 있고 모든 CPU에서 여러 스레드가이 변수에 액세스하고 있습니다. 원자와
비교하고 스핀 설정된 tryLockfor(;;)
{
auto temp = go_for_work();
if (temp -> spin.trylock() == 0)
{
continue;
}
}
... go_for_work
{
auto old = global_var;
auto new_var = old
new_var++;
global_var = new_var;
return new_var
}
이 내가 분명히 희망 거친 코드와 교환
auto old = global_var;
auto new_var = old
for (;;) {
new++;
bool got_it = atomic_compare_and_swap(global_var,
old,
new_var);
if (got_it) {
return new_var;
}
old = global_var;
new_var = old;
}
. 명확하지 않은 경우 알려주십시오.
global_var은 int 구조체가 아닙니다.
그래서, 내 주요 목표는 하나 더 빠른 atomic_compare_and_swap 또는 spin.trylock()입니다 global_var 보호하는 것입니다, 또 다른 기술?
사이드 노트 : C++ 키워드 인 변수 new에 이름을 지정하지 마십시오 – CoryKramer
두 가지 모두 바쁜 루프입니다 - 차이점이 없습니다 (둘 다 잘못됨) –
'global_var'유형이 필수이면, 원자 증분을 사용하십시오. – jxh