답변:
예, 메모리로드 및 저장 명령만으로 상호 배제를 구현할 수 있습니다. 이 문제에 대한보다 간단한 해결책을 연속적으로 고안해 온 오랜 전통이 있습니다.
내가 아는 "Dekker의 솔루션"이라고 알려진 가장 초기 버전은 Edjk W. Dijkstra에서 소개되었습니다 . F. Genuys, ed., Programming Languages : NATO Advanced Study Institute , pp. 43-112, Academic Press, 1968의 "순차 프로세스 협력" . 그 이후로 수십 가지 솔루션이있었습니다. 나는 더 주목할만한 몇 가지에 대해서만 이야기 할 것입니다.
람보 르트, 레슬리; " 1974 년 Dijkstra의 동시 프로그래밍 문제의 새로운 해결책", Comm ACM 17 (8) : 453-455, 1974 는 "베이커리 알고리즘"을 소개합니다. 빵집 가게에서 제공). 이 알고리즘의 특히 주목할만한 특징 중 하나는 상호 배제 문제를 해결하기 위해 하드웨어 원자가 전혀 필요하지 않다는 것입니다. 동일한 위치에 대한 겹침 쓰기는 모든 값을 반환 할 수 있으며 알고리즘은 여전히 작동합니다. Lamport는 그의 홈페이지에있는 논문에 대한 설명에서 이것에 대해 조금 설명합니다 .
Peterson의 솔루션, Peterson, GL; "상호 배제 문제에 관한 신화", Inf. Proc. 레트 사람. , 12 (3) : 115-116, 1981 은 이해하기 쉽고 특히 추론하기 위해 특별히 고안된 것입니다. 마지막으로, 내가 가장 좋아하는 것은 Lamport, Leslie입니다. "빠른 상호 배제 알고리즘" ACM Trans. Comp. Sys. , 5 (1) : 1-11, 1987. 이 백서에서 Lamport는 중요한 부분에 대한 경합이 거의없는 (일반적인) 경우의 상호 배제 문제에 대한 솔루션을 최적화하려고했습니다. 상호 배제와 교착 상태의 자유를 보장하지만 공정성은 보장하지 않습니다. 그것은 경합이 없을 때 O (1) 시간에 N 프로세서를 동기화 할 수있는 정상적인 읽기 및 쓰기만을 사용하는 최초의 상호 배제 알고리즘이라고 생각합니다. (경쟁이있을 때는 O (N) 테스트로 넘어갑니다.) 경합이없는 경우 최선을 다하는 것은 7 번의 메모리 액세스라는 비공식 데모를 제공합니다. (Dekker와 Peterson은 모두 4로 처리하지만 2 개의 프로세서 만 처리 할 수 있습니다. 알고리즘을 N으로 확장하면 추가 O (N) 액세스를 추가해야합니다.)
메모리 읽기와 쓰기만으로 상호 배제를 해결하는 문제를 해결하는 사람들은 문제와 그 해결 방법에 대한 다른 사람들의 이해 부족으로 인해 좌절감을 느낄 것입니다. 이것은 부분적으로 Peterson의 논문 제목 ( "상대적 배제 문제에 관한 신화")과 Lamport가 1991 년에 발표 한 짧은 메모에 의해 증명됩니다 : Lamport, Leslie; "상호 적 배제 문제가 해결되었습니다", Comm ACM 34 (1) : 110, 1991 , Lamport는 그의 홈페이지에서 다소 쓰라린 설명을 합니다.
따라서 두 번째 질문에 답하십시오. 아닙니다. 중요한 섹션 문제에 대한 하드웨어 수준 솔루션에는 3 가지 이상의 범주가 있습니다 (로드 및 저장 만 사용하는 것이 하나이고 다른 것들은 비교 및 스왑 지침,로드 링크 / 저장 조건부 관련 명령어 (캐시 일관성 프로토콜을 사용하여 원 자성 테스트) 및 페치 및 추가 명령어) 다른 의미에서 실제로는 한 가지 범주의 솔루션 만 있습니다. 글로벌 이벤트 순서에 동의하기 위해 비동기 프로세스를 여러 개 가져 오는 솔루션 .
(이 답변은 매우 다른 질문에 대해 이전에 답변 한 내용을 광범위하게 편집 한 것입니다 .)