이 함수가 "C++"링키지가 아닌 "C"를 갖는 것이 바람직한 이유는 추측 할 수 없습니다.왜 std :: atomic_thread_fence에 "C"연결이 있습니까?
답변
atomic_thread_fence
은 비 원자력 및 여유 원자 액세스의 메모리 동기화 순서를 설정합니다.
동시성, 특히 완화 된 메모리 동시성은 악의적으로 미묘하고 오류가 발생하기 쉬운 도메인이므로 이러한 최적화를 확인하는 것은 매우 중요합니다. Ref1.
그런 것이 널리 사용됩니다 CompCertTSO.
CompCertTSO는 스레드 관리 및 동기화를위한 동시성 프리미티브와 x86-TSO 모델을 기반으로 한 TSO 완화 된 메모리 모델로 향상된 C 프로그래밍 언어의 큰 하위 집합 인 ClightTSO에서 x86 어셈블리 코드를 생성하는 컴파일러입니다.
따라서이 함수가 "C"링키지를 가지려면 최적화 및 테스트 목적이 바람직합니다.
LWG issue 1479에 의해 추가되었으며 C++ 11에 대한 최종 의견을 처리했습니다.
이 변경의 근거는 C 언어 호환성입니다 (C11 스레드 라이브러리의 stdatomic.h에는 atomic_thread_fence이라는 기능이 동일 함).
필자가 이해하는 한, 항상 C와 C++ 원자 라이브러리가 공존 할 수있는 계획이었습니다. 다른 호환 예제는 과 같은 std :: atomic의 C 호환 유형 별칭과 C 호환 매크로입니다 ATOMIC_VAR_INIT
C++ 프로토 타입이 std 네임 스페이스에있는 경우 C 및 C++ 프로토 타입이 어떻게 호환되는지 이해할 수 없습니다. – WaltK
@WaltK '
@waltK는'sin' 또는'printf'와 정확하게 같습니다. –
'C'에 http://en.cppreference.com/w/c/atomic/atomic_thread_fence와 동일한 기능이 있고 이것이 (std 네임 스페이스로) 가져온 버전 일 수 있습니까? –