2013-02-10 4 views
2

나는 안토니 윌리엄스가 C++ Concurrency in Action을 읽고 있습니다. 가있다 "편안한 주문을 이해함"편에서 :exchange 또는 compare_and_exchange가 수정 값의 마지막 값을 읽습니까?

등이 번호를 적어 하단에 이 무엇인지 말해 "와 같이 큐비클에서 사람을 말할 수있는 몇 가지 추가가있다 목록 "(교환)"및 목록의 하단에 숫자 경우 이 번호를 적어 라; 그렇지 않으면 내가 무엇을 "(compare_exchange_strong) 짐작 했어야하지만, 그것은 일반적인 원칙에 영향을주지 않습니다.

제약 조건 이전에 추가 스레드 간이 발생하지 않으면 이러한 작업은 항상 수정 순서로 마지막 값을 읽습니다. 나는. 거기에 캐시 업데이트/등 (심지어 편안한 주문)?

답변

5

예.

원자 읽기 - 수정 - 쓰기 작업은 항상 읽기 - 수정 - 쓰기 작업과 관련된 쓰기 전에 기록 된 (수정 순서대로) 마지막 값 을 읽을한다 C++ 표준은 (29.3/10) 말한다 .

exchange과 성공적인 compare_exchange_{weak,strong} 연산은 모두 읽기 - 수정 - 쓰기 연산입니다.