2012-10-31 5 views
2

게재 안전에 관한 섹션에서 this article을 따르려고합니다. 내 사례는 기사의 간단한 예와 다르지 않지만 "게시 된"데이터는 단일 값이 아니며 struct의 여러 필드가 있습니다. 게시자는 각 필드를 개별적으로 작성하므로 memory_order_release으로 상점의 각 글을 마무리하면 좋을 것입니다.게재 안전, 편안한 메모리 모델 및 memcpy

소비자는 먼저 데이터가 준비되었음을 memory_order_acquire으로 확인합니다. 그런 다음 memcpy을 사용하여 다른 모든 곳의 struct을 복사하여 사용하고 싶습니다 (기존 코드의 나머지 부분에 더 잘 들어 맞기 때문에).하지만 메모리 모델을 지정할 수 없기 때문에 안전하지 않습니다. . 이것은 단지 편집증입니까 아니면 심각한 문제 일 수 있습니까?

amd64/x86 관련 제안 사항이 허용되었습니다.

답변

0

의미 취득은 프로그램 순서에서 나중에로드가 나중에로드 할 때 요구하는 의미에 관계없이 장벽 앞에서 다시 정렬되지 않음을 의미합니다. 그래서 나는 인수 장벽이 안전한 후에 구조를 읽기 위해 memcpy를 사용한다고 믿는다.

+0

왜 기사 작성자는로드 (및 저장) 연산이 모두 원 자성인지 확인합니다. 마지막 것만이 명시적인 메모리 모델을 가지고 있으면 충분하지 않아야합니까? –

+0

@ LorenzoPistone, 해당 블로그 게시물에 대한 의견은 일부 수정 사항이 포함되어 있습니다. 예를 들어, [comments 20 and 21] (http://bartoszmilewski.com/2008/12/01/c-atomics-and-memory-ordering/#comment-3037)에서 변수'data'가 원자가 될 필요가 없다. 특히 Bartosz가 "인수/해제 의미론으로 준비된 변수는 뮤텍스와 같이 동작합니다"라고 말합니다. –