뮤텍스에 대한 atomics를 사용하는 주된 이유는 뮤텍스가 비싸지 만 atomics
의 기본 메모리 모델이 memory_order_seq_cst
인 것과 마찬가지로 비싸지 않은가?`std :: mutex`와 'std :: atomic (memory_order_seq_cst)`보다 느리게 동기화됩니까?
질문 : 잠금을 사용하는 동시 프로그램은 동시 잠금없는 프로그램만큼 빠를 수 있습니까?
원자력에 memory_order_acq_rel
을 사용하고 싶지 않으면 노력하지 않을 수도 있습니다.
편집 : 각 잠금도 전체 메모리 장벽을해야하기 때문에 내가 잠금 기반 캔트하지만 뭔가를 누락 될 수 있습니다하면 잠금이없는 것보다 빠릅니다. 그러나 자물쇠가 없으므로 메모리 장벽에 덜 제한적인 기술을 사용할 수 있습니다.
그래서 내 질문으로 돌아 가면 잠금 장치가 기본 잠금보다 새로운 C++ 11 표준을 기반으로합니다. memory_model
?
"lock-free> = 성능 측정시 잠금 기반"이 true입니까? 2 개의 하드웨어 스레드를 가정 해 봅시다.
편집 2 : 내 질문이 진행 보장에 대한 아니며, 어쩌면 내가 맥락에서 "잠금없는"사용하고 있습니다.
기본적으로 공유 메모리가있는 2 개의 스레드가 있고 필요한 유일한 보증은 하나의 스레드가 쓰고 다른 스레드가 읽거나 쓸 수 없다면 내 가정은 간단한 원자 compare_and_swap
작업이 많다는 것입니다 뮤텍스를 잠그는 것보다 빠릅니다.
하나의 스레드가 공유 메모리에 절대 닿지 않으면 아무런 이유없이 반복적으로 잠금과 잠금 해제가 끝나게됩니다. 그러나 원자 적 조작에서는 매번 1 CPU 주기만 사용합니다.
스핀 잠금과 뮤텍스 잠금은 경합이 거의 없을 때 매우 다릅니다.
자물쇠, 잠금 장치가없는 코드 및 대기 코드가 서로 다른 진행 보증이 있습니다. –
[필수 읽기] (http://www.1024cores.net/home/lock-free-algorithms). –
시계 : https://www.youtube.com/watch?v=DCdGlxBbKU4 – NoSenseEtAl