2017-02-01 6 views
5

이 함수가 "C++"링키지가 아닌 "C"를 갖는 것이 바람직한 이유는 추측 할 수 없습니다.왜 std :: atomic_thread_fence에 "C"연결이 있습니까?

+4

'C'에 http://en.cppreference.com/w/c/atomic/atomic_thread_fence와 동일한 기능이 있고 이것이 (std 네임 스페이스로) 가져온 버전 일 수 있습니까? –

답변

0

atomic_thread_fence은 비 원자력 및 여유 원자 액세스의 메모리 동기화 순서를 설정합니다.
동시성, 특히 완화 된 메모리 동시성은 악의적으로 미묘하고 오류가 발생하기 쉬운 도메인이므로 이러한 최적화를 확인하는 것은 매우 중요합니다. Ref1.
그런 것이 널리 사용됩니다 CompCertTSO.
CompCertTSO는 스레드 관리 및 동기화를위한 동시성 프리미티브와 x86-TSO 모델을 기반으로 한 TSO 완화 된 메모리 모델로 향상된 C 프로그래밍 언어의 큰 하위 집합 인 ClightTSO에서 x86 어셈블리 코드를 생성하는 컴파일러입니다.

따라서이 함수가 "C"링키지를 가지려면 최적화 및 테스트 목적이 바람직합니다.

5

LWG issue 1479에 의해 추가되었으며 C++ 11에 대한 최종 의견을 처리했습니다.

이 변경의 근거는 C 언어 호환성입니다 (C11 스레드 라이브러리의 stdatomic.h에는 atomic_thread_fence이라는 기능이 동일 함).

필자가 이해하는 한, 항상 C와 C++ 원자 라이브러리가 공존 할 수있는 계획이었습니다. 다른 호환 예제는 과 같은 std :: atomic의 C 호환 유형 별칭과 C 호환 매크로입니다 ATOMIC_VAR_INIT

+0

C++ 프로토 타입이 std 네임 스페이스에있는 경우 C 및 C++ 프로토 타입이 어떻게 호환되는지 이해할 수 없습니다. – WaltK

+0

@WaltK ''의 C++ 구현에 ''을 포함시킨 다음 'namespace std {using :: atomic_thread_fence; } '또는 동등한 것. 물론 그것은 C++에서 여전히 C++ 링키지가있는'atomic_flag_test_and_set'에 도움이되지 않습니다. 아마도 NB 코멘트는 그렇게 잘 생각되지 않았을 것입니다. – Cubbi

+3

@waltK는'sin' 또는'printf'와 정확하게 같습니다. –