ใช่คุณสามารถใช้การยกเว้นซึ่งกันและกันได้ด้วยการโหลดหน่วยความจำและคำแนะนำในการจัดเก็บเท่านั้น มีประเพณีอันยาวนานของการคิดค้นวิธีแก้ปัญหาที่ง่ายกว่าอย่างต่อเนื่องสำหรับปัญหานี้
รุ่นแรกสุดที่ฉันรู้จักเรียกว่า "โซลูชันของ Dekker" ได้รับการแนะนำในDijkstra, Edsger W.; "กระบวนการให้ความร่วมมือตามลำดับ" ในเอฟ Genuys เอ็ด. การเขียนโปรแกรมภาษา: นาโต้ทุกประเภทสถาบันการศึกษา , PP 43-112, นักวิชาการสื่อมวลชน 1968. มีวิธีแก้ปัญหาหลายสิบนับตั้งแต่นั้น ฉันจะหารือเพียงไม่กี่คนที่มีชื่อเสียงมากขึ้น
แลมพอร์ตเลสลี่; "ทางออกใหม่ของปัญหาการเขียนโปรแกรมพร้อมกันของ Dijkstra" Comm ACM 17 (8): 453-455, 1974แนะนำ "อัลกอริธึมเบเกอรี่" (เพราะมันขึ้นอยู่กับการเปรียบเทียบของคนที่รับหมายเลขเพื่อกำหนดลำดับที่พวกเขาจะ เสริฟที่ร้านเบเกอรี่) หนึ่งในคุณสมบัติที่โดดเด่นของอัลกอริธึมนี้คือมันแสดงให้เห็นว่าไม่จำเป็นต้องมีฮาร์ดแวร์อะตอมมิกซิตี้เพื่อแก้ปัญหาการแยกซึ่งกันและกัน อ่านที่ทับซ้อนกันเขียนไปยังตำแหน่งเดียวกันสามารถคืนค่าใด ๆและอัลกอริทึมยังคงทำงาน แลมพอกล่าวถึงบิตในคำอธิบายของกระดาษบนหน้าบ้านของเขา
โซลูชันของ Peterson, Peterson, GL; "ความเชื่อเกี่ยวกับปัญหาการกีดกันซึ่งกันและกัน" Inf พร เลทท์ , 12 (3): 115-116, 1981 , เป็นสิ่งที่ออกแบบมาโดยเฉพาะเพื่อให้เข้าใจง่ายและมีเหตุผลเกี่ยวกับ ในที่สุดสิ่งที่ฉันชอบคือLamport, Leslie; "อัลกอริทึมการยกเว้นร่วมกันอย่างรวดเร็ว" Trans ACM คอมพ์ Sys , 5 (1): 1-11, 1987. ในบทความนี้แลมพอร์ตพยายามเพิ่มประสิทธิภาพการแก้ปัญหาการแยกซึ่งกันและกันในกรณี (ทั่วไป) ที่มีความขัดแย้งเล็กน้อยสำหรับส่วนที่สำคัญ มันรับประกันการกีดกันซึ่งกันและกันและเสรีภาพการหยุดชะงัก แต่ไม่ยุติธรรม เป็น (ฉันเชื่อว่า) อัลกอริทึมการแยกซึ่งกันและกันครั้งแรกโดยใช้เฉพาะการอ่านและการเขียนปกติที่สามารถซิงโครไนซ์โปรเซสเซอร์ N ในเวลา O (1) เมื่อไม่มีการช่วงชิง (เมื่อมีการช่วงชิงมันจะกลับไปทดสอบ O (N)) เขาให้การสาธิตอย่างไม่เป็นทางการว่าสิ่งที่ดีที่สุดที่คุณสามารถทำได้ในกรณีที่ไม่มีการช่วงชิงคือการเข้าถึงหน่วยความจำเจ็ดครั้ง (ทั้ง Dekker และ Peterson ทำได้ด้วย 4 แต่พวกมันสามารถรองรับโปรเซสเซอร์ 2 ตัวเท่านั้นเมื่อคุณขยายอัลกอริธึมเป็น N พวกเขาต้องเพิ่มการเข้าถึง O (N) เพิ่มเติม)
เห็นได้ชัดว่าคนที่ทำงานเกี่ยวกับปัญหาของการแก้ปัญหาการยกเว้นซึ่งกันและกันโดยใช้เพียงการอ่านและเขียนหน่วยความจำได้รับความผิดหวังโดยความเข้าใจของคนอื่น (ขาด) ของปัญหาและการแก้ปัญหา นี่แสดงให้เห็นบางส่วนโดยชื่อของบทความของ Peterson ("ตำนานเกี่ยวกับปัญหาการกีดกันซึ่งกันและกัน") และอีกส่วนหนึ่งจากบันทึกย่อที่ Lamport ตีพิมพ์ในปี 1991: Lamport, Leslie; "การยกเว้นร่วมกันปัญหาได้รับการแก้ไข" Comm ACM 34 (1): 110 1991ซึ่งแลมพออธิบายค่อนข้างขมขื่นในหน้าแรกของเขา
ดังนั้นเพื่อตอบคำถามที่สองของคุณ: ไม่มีโซลูชันระดับฮาร์ดแวร์มากกว่าสามหมวดหมู่สำหรับปัญหาส่วนที่สำคัญ (โดยใช้เพียงแค่โหลดและจัดเก็บเป็นหนึ่งเท่านั้นส่วนอื่น ๆ เกี่ยวข้องกับคำแนะนำเปรียบเทียบและสลับ, โหลดลิงค์ / เงื่อนไขร้านค้า คำแนะนำ (ใช้โปรโตคอลการเชื่อมโยงกันของแคชเพื่อทดสอบอะตอมมิกซิตี) และคำแนะนำการดึงและเพิ่ม) ในอีกแง่หนึ่งมีวิธีแก้ไขปัญหาเพียงประเภทเดียวเท่านั้น: ผู้ที่เกี่ยวข้องกับการรับกระบวนการแบบอะซิงโครนัสมากมาย .
(โปรดทราบว่าคำตอบนี้เป็นการแก้ไขคำตอบก่อนหน้านี้ของฉันอย่างมากสำหรับคำถามที่ต่างออกไป)