나는 다중 프로세서 프로그래밍 1 의 예술을 연구했으며 그 텍스트는 당신이 참조하는 책과 같이 명확성이 부족합니다. TAMPP의 인용문은 다음과 같습니다.
견적 1 (자유없는 정의)
메소드 호출이 유한 한 단계로 무한정 완료되는 것을 보장하는 경우 메소드는 잠금이 없습니다.
견적 2 (비 차단의 정의)
다른 보류중인 호출이 완료 될 때까지 기다릴 필요가없는 total 메소드의 보류중인 호출이 필요하지 않습니다.
견적 3 (자물쇠가 비 차단임을 주장)
대기 및 잠금이없는 비 차단 진행 조건은 시스템이 스레드를 예약하는 방식에 관계없이 전체적으로 계산이 진행되도록합니다.
문제는 인용문 3의 주장이 인용문 1의 정의를 분명히 따르지 않는다는 것입니다. 이미 언급했듯이 동기화 된 대기열은 인용문 1을 만족시키는 것처럼 보입니다.
인용문 3에서 "시스템이 스레드를 예약하는 방법과 무관하게"매우 모호한 문구에 주목하십시오. 여기에는 "스레드 스케줄링 시스템"에 대한 공식적인 설명이 나오지 않으므로 정의의 의미 에 대한 선입견을 바탕으로 속성을 재구성 해야 합니다.
- 시스템은 항상 일부 스레드의 명령을 실행 합니다.
- 주어진 스레드의 명령을 절대 실행할 수 없습니다 .
- 모든 스레드는 고려중인 메소드를 호출합니다.
이러한 시스템에서는 블로킹 방법에 잠금이 없어야합니다. 잠금을 보유한 스레드가 다시 실행되도록 예약되지 않은 경우, 한정된 단계로 메소드 호출을 완료 할 수있는 다른 스레드가 없습니다. 메소드의 단계를 실행하는 일부 스레드. 보다 현실적인 시스템의 경우, 각 스레드에 CPU 시간을 제공한다는 보장은 비 블로킹 속성을 명시 적으로 포함해야합니다.
잠금없는 정의 수정
메소드는 비 블로킹 인 경우 잠금이 없으며 추가로 일부 메소드 호출이 유한 한 수의 단계로 완료되는 것을 보장합니다.
1 Maurice Herlihy, Nir Shavit, 멀티 프로세서 프로그래밍 기술, Elsevier 2008, 58-60 페이지