순환 버퍼 큐에서 잠금 없는 진행 보장
개요:
많은 프로그래머 "lock-free"는 단순히 뮤텍스가 없는 동시 프로그래밍을 의미한다고 잘못 생각합니다. 그러나 진정한 잠금 없는 알고리즘은 진행을 보장하여 다른 스레드의 작업에 관계없이 하나 이상의 스레드가 앞으로 나아갈 수 있도록 보장합니다.
Liblfds 경계 대기열:
liblfds 라이브러리의 제한된 대기열 구현은 잠금 없는 진행 보장 측면에서 의심스러운 것으로 보입니다. 알고리즘은 푸시할 슬롯을 예약합니다. 즉, 푸시 스레드가 완료될 때까지 슬롯을 팝할 수 없습니다. 이러한 종속성은 대기열이 실제로 잠금 해제 자격을 갖춘 것인지에 대한 우려를 불러일으킵니다.
잠금 해제의 정의:
잠금 없는 구조는 모든 스레드가 다른 스레드가 구조를 사용하는 것을 차단하지 않고 어느 시점에서나 무기한 일시 중단됩니다. 이 정의에 따르면 liblfds 대기열은 엄격하게 잠금이 없는 것은 아닙니다. 푸시 스레드가 일시 중지되면 큐는 사용할 수 없는 상태가 되어 고정 크기 큐의 계약을 위반합니다.
성능 대 정확성:
이 구현 동안 합리적인 성능 특성을 보일 수 있지만 진정한 잠금 없는 구조의 일부 중요한 정확성 특성이 부족합니다. 주요 기능적 단점은 다음과 같습니다.
결론:
liblfds 경계 큐 구현은 잠금 없는 가장 엄격한 정의에 미치지 못합니다. 일부 성능 이점을 제공하지만 모든 시나리오에서 진행과 정확성을 보장하는 데 중요한 특정 기능 보장이 부족합니다.
위 내용은 Liblfds Bounded Queue는 실제로 잠금이 없습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!