gcc를 사용하여 원자 변수에 관한 가짜 질문이 있습니다. 내 컴퓨터가 __sync_add_and_fetch
기능을 지원합니다. 스레드 A에서이 호출을 사용하여 my_variable (int)
을 설정합니다.C와 gcc의 원자 변수에 대한 동등성 테스트
공유 변수를 읽는 공유 변수를 값과 비교하여 테스트하려고합니다. 20 는 공유 변수에 경쟁이있을 때 __sync_val_compare_and_swap
이 실패 할 수 있습니다 GCC 잘못 아니에요 경우 올바른 다음
if(__sync_bool_compare_and_swap(&my_variable, 20, 20)){
//..Ok! It is 20 so go ahead!
}else{
// wrong: it is not ok.
}
를 작성,하지만 난 그것을 반환하지 모르겠어요입니다 __sync_bool_compare_and_swap
과 어떻게 작동합니까?
동시에 스레드 A가 __sync_fetch_and_add
을 사용하여 값을 변경하는 경우에도 문제가 발생합니까? __sync_bool_compare_and_swap
이 동시에 실행 중일 때 sum 이벤트의 값을 반환한다는 것이 항상 보장됩니까?
이상적으로 말하자면, 필자는 실제로 원자 적 읽기 (READ) 만 수행하거나 스왑 (Swap)하는 기능이 정말로 필요할 것입니다. C 나 gcc 같은 것이 있습니까?
덕분에 많은
AFG
이 코드가 유용하다고 생각하면 코드에 주요 논리 문제가 있다고 의심됩니다. –