두 개의 8x 바이트 메모리 영역을 스왑해야합니다 (대부분 CMPXCHG8B
을 사용). 그러나 가능한 한 빨리이 작업을 수행하려고합니다. 이 작업이 끝날 때까지 다른 스레드가 대기합니다. 나는 몇 가지 질문이 관련이 : 나는 복수를 프로세서, 또는 여러 코어을 사용하고있는 경우 LOCK
접두사에만 필요 Intel x86 CPU에서 CAS를 비교하고 가장 빨리 교체하는 방법은 무엇입니까?
가 결정됨
? 나는 가능하다면 이것을 사용하는 것을 정말로 피하고 싶다.- 대기 스레드가 액세스하려는 메모리가 다른 캐시 라인에있는 경우 LOCK
접두어를 사용하지 않고 MESI 프로토콜을 기반으로 "잠금"할 수 있습니까?
단일 프로세서 (다중 코어)에서 실행 중이지만 차이점이있을 경우 멀티 프로세서 시스템과의 차이점을 가장 잘 설명하는 답변을 제공합니다.
이 토론에서는 "processor"== "core"입니다. –
'CMPXCHG8B'는 레지스터와 메모리를 스왑하기 때문에 두 개의 메모리 영역이 아니라는 점에서 많은 도움이 될 것이라고 생각합니다. 2 개의 연속 포인터 만 바꾸거나 뮤텍스를 사용해야 만 코드를 다시 작성할 수 있습니다. – Jester