2016-12-03 12 views
0

이것은 A. Williams C++ Concurrency in Action 북이며 위험 요소가있는 잠금이 적용되지 않은 항목입니다. 난 그냥 두 줄을 제외하고, 그것의 이해를 얻을 가정, 여기에 그들은 (여기 source)입니다IF의 기질 및 다음 문

// code before 
if (old_head) { 
res.swap(old_head->data); 
// code after 

질문은 : 다른 스레드 포인터가되기 전에 "old_head"(수정 등)을 삭제할 수 있습니다 역 참조 (old_head-> data)? 논리에 따르면 윌리엄스의 전체 코드가 잘못된 것은 아니지만 그것이 일종의 원자 조작인지는 의심 스럽습니다. 어떻게 생각해?

+1

http://preshing.com/20120612/an-introduction-to-lock-free-programming/ –

답변

3

복수 스레드에 대해 old_head을 사용할 수 있고 인용 부호가있는 코드 블록이 동기화 메커니즘으로 보호되지 않으면 예 old_head은 확인과 참조 해제 사이에서 수정할 수 있습니다. if 그 자체로는 어떠한 원 자성도 보장되지 않습니다.