Evet, yalnızca bellek yükleme ve saklama talimatlarıyla karşılıklı dışlama uygulayabilirsiniz. Bu soruna art arda daha basit çözümler geliştirme geleneği uzun süredir var.
Bildiğim en eski versiyon olan "Dekker'ın çözümü", Dijkstra, Edsger W'de tanıtıldı ; F. Genuys, ed., Programlama Dilleri: NATO İleri Eğitim Enstitüsü , s. 43-112, Academic Press, 1968 . O zamandan beri onlarca çözüm var. Daha dikkate değer olanlardan sadece birkaçını tartışacağım.
Lamport, Leslie; "Dijkstra'nın Eşzamanlı Programlama Problemine Yeni Bir Çözüm", Comm ACM 17 (8): 453-455, 1974 , "Fırın algoritması" nı sunar (çünkü insanların sırayla olacağı sırayı belirlemek için sayı alan analojisine dayanır) fırın mağazasında servis). Bu algoritmanın özellikle dikkate değer özelliklerinden biri, karşılıklı dışlama problemini çözmek için hiçbir donanım atomisitesinin gerekli olmadığını göstermesidir. Aynı konuma çakışan yazmalar herhangi bir değer döndürebilir ve algoritma yine de çalışır. Lamport bunu ana sayfasındaki makalenin açıklamasında biraz tartışıyor .
Peterson'ın çözümü, Peterson, GL; "Karşılıklı dışlama sorunu hakkındaki mitler," Inf. Proc. Lett. , 12 (3): 115-116, 1981 , anlaşılması kolay ve gerekçelendirilmesi için özel olarak tasarlanmış bir metindir . Sonunda, benim favorim Lamport, Leslie; "Hızlı Karşılıklı Dışlama Algoritması," ACM Trans. Zorunlu. Sist. , 5 (1): 1-11, 1987. Bu makalede Lamport, kritik bölüm için çok az çekişme olduğu (yaygın) durumda karşılıklı dışlama sorununa bir çözüm optimize etmeye çalışıyordu. Karşılıklı dışlanma ve kilitlenme özgürlüğünü garanti eder, ancak adaleti garanti etmez. Bu, (normal), N işlemcilerini çekişme olmadığında O (1) zamanda senkronize edebilen normal okuma ve yazma kullanan ilk karşılıklı dışlama algoritmasıdır. (Çekişme olduğunda, O (N) testine geri döner.) Çekişmesiz durumda yapabileceğiniz en iyi şeyin yedi hafıza erişimi olduğunu resmi olmayan bir şekilde gösterir. (Dekker ve Peterson her ikisi de 4 ile yaparlar, ancak sadece 2 işlemciyi işleyebilirler, algoritmalarını N'ye genişlettiğinizde fazladan bir O (N) erişimi eklemeleri gerekir.)
Görünüşe göre, sadece bellek okuma ve yazma kullanarak karşılıklı dışlama çözme problemi üzerinde çalışan insanlar, diğer insanların problemi ve çözümlerini anlama (eksikliği) yüzünden hayal kırıklığına uğrarlar. Bu kısmen Peterson'ın makalesi başlığıyla ("Karşılıklı dışlama sorunuyla ilgili mitler") ve kısmen Lamport'un 1991'de yayınladığı kısa bir notla gösterilmiştir: Lamport, Leslie; "Karşılıklı Dışlama Sorunu Çözüldü", Comm ACM 34 (1): 110, 1991 , Lamport ana sayfasında biraz acı bir şekilde anlatılıyor .
İkinci sorunuzu cevaplamak için: Hayır. Kritik bölüm sorununa üçten fazla donanım seviyesi çözümü kategorisi vardır (sadece yükleri ve depoları kullanmak bir tanesidir, diğerleri karşılaştırma ve takas talimatları, yük bağlantılı / mağaza koşullu içerir talimatlar (atomisiteyi test etmek için önbellek tutarlılık protokolünü kullanarak) ve getirme ve ekleme talimatları.) Başka bir anlamda gerçekten sadece bir çözüm kategorisi vardır: küresel bir olay sırasını kabul etmek için bir dizi asenkron işlem almayı içerenler .
(Bu cevabın, çok farklı bir soru için verdiğim daha önceki bir cevabın (kapsamlı) bir düzenlemesi olduğunu unutmayın .)