x86_64의 Linux glibc pthread 기능이 약하게 정렬 된 메모리 액세스를위한 펜스 역할을합니까? (pthread_mutex_lock/unlock은 내가 관심있는 정확한 함수이다).pthreads v. SSE 약한 메모리 정렬
SSE2는 약한 메모리 순서 (특히 movntps와 같은 비 임시 저장소)에 대한 지침을 제공합니다. 이 지침을 사용하고 있고 다른 스레드/코어가 주문을 보도록하려면 원하는 sfence 명령과 같은 명시적인 울타리가 필요하다는 것을 이해합니다.
일반적으로 pthread API가 펜스로 적절하게 작동해야합니다. 그러나, 나는 보통의 C 코드가 약하게 정렬 된 메모리 접근을 생성하지 않을 것이라고 생각한다. 그래서 pthread가 약하게 정렬 된 접근을위한 펜스처럼 행동 할 필요가 있다고 확신하지는 않는다.
glibc pthread 소스 코드를 통해 읽는 mutex는 적어도 "unclended path"에 "lock cmpxchgl"을 사용하여 구현됩니다. 그래서 내가 알고 있어야 할 것은 SSE2 약하게 명령 된 접근을위한 울타리로서의 지시가되는 것인가?
그럼 아무도 대답하지 않아서 슬리브를 감아 테스트 프로그램을 작성했습니다. 진행 상황 : ------ * pthread 스핀 록을 사용하면 울타리가 아닌 것을 쉽게 증명할 수 있습니다. * 울타리로 작동하지 않는 pthread 뮤텍스를 생성하지 못했습니다. ------ 뮤텍스가 펜스이거나 내가 방금 운이 좋았 기 때문에 실패한 경우 확실하지 않습니다. 내 테스트 코드는 https://gist.github.com/rcls/c855e3e782253e58e046 – user1998586