예를 들어,할당은 C11 원자의 의미는 무엇입니까?
atomic_int test(void)
{
atomic_int tmp = ATOMIC_VAR_INIT(14);
tmp = 47; // Looks like atomic_store
atomic_int mc; // Probably just uninitialised data
memcpy(&mc,&tmp,sizeof(mc)); // Probably equivalent to a copy
tmp = mc + 4; // Arithmetic
return tmp; // A copy - perhaps load then store
}
연타이 모든 행복입니다. 표준 7.17 절을 읽었으며 메모리 모델과 정의 된 함수 (init, store, load 등)에 대해 많이 말했지만 일반적인 작업 (+, = 등)에 대해서는 아무 것도 말하지 않습니다.
또한 기능에 struct wot { atomic_int value; }
을 전달하는 동작이 중요합니다.
저는 할당이 memory_order_seq_cst를 사용하여 원자 적로드와 동일하게 동작한다고 생각합니다.
더 낙천적으로, 구조체 할당, 함수 전달, 함수 반환 및 memcpy조차도 신중하게 memory_order_seq_cst 아래의 비트 패턴 복사와 동일하게 동작한다고 생각합니다.
표준에 대한 어느 쪽의 믿음에 대한 근거도 찾을 수 없습니다. 원자 기본 요소의 할당과 memcpy가 정의되지 않은 동작이라는 확실한 기회가 있습니다.
원자 기본 요소의 원시 연산은 어떻게 작동해야합니까?
감사합니다.
고마워요! 일반적인 크기와 정렬 제약 조건이 충족되면 _Atomic 유형에 memcpy가 정의되어 있습니까? 위의 예제는 두 개의 _Atomic int 사이의 memcpy이며 서로 크기가 동일하지만 memcpy와 정렬 된 char 배열을 _Atomic 필드에 포기하는 캡슐화 기법으로 사용하는 경향이 있습니다. 구조체 내에서. –
아니요, '_Atomic'에 대한 액세스는 연산자 또는 함수를 통과하는 경우에만 유효합니다. 분명히'memcpy'를하고 있다면 원 자성을 보장 할 수 없다. –
감사합니다. 나는 이걸로 일할 수 있다고 생각해. –