gcc에 내장 된 원자 작업 : 는 CAS와 opration을 추가 http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html원자 연산을 구현하는 방법은 무엇입니까?
내가 원자 조작이 필요합니다. 그것은 내장 기능 __atomic_compare_exchange_n gcc가처럼 조금,하지만 다른 :
그냥이 같은 함수 프로토 타입 :
bool atomic_compare_add(int &ptr, int &expected, int val)
는함수는 atomicly을 실행
if (ptr != expected) { ptr = ptr + val; return true; } else { return false; }
원하는 함수는 입니다.은 __atomic_compare_exchange_n에서 __atomic_add_fetch, __atomic_comp는 __atomic_add_fetch입니다. are_exchange_n은 if (*ptr == *expected) { *ptr = desire; return true; } else { return false; }
을 의미하고 __atomic_add_fetch는 *ptr = *ptr + val; return *ptr;
을 의미합니다.
Linux gcc/g ++에서이 작업을 구현하는 방법은 무엇입니까?
: http://en.cppreference.com/w/cpp/atomic/atomic을 – OutOfBound
당신이 게시 한 링크는'__atomic_add_fetch'를'__atomic_compare_exchange_n' 다음 10 줄로 설명합니다. – Frank
로직을 좀 더 일반적인'if (ptr == expected) {ptr = ptr + value; } else {do nothing}'을 사용하고 ['atomic :: compare_exchange'] (http://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange) – rustyx