มีการใช้งานล็อคฮาร์ดแวร์โดยไม่ต้องทดสอบและตั้งค่าหรือแลกเปลี่ยน?


19

โดยทั่วไปแล้วล็อกจะถูกนำไปใช้ผ่านคำแนะนำการทดสอบและตั้งค่าและสลับระดับเครื่อง มีการนำไปใช้งานอื่น ๆ ที่ไม่ได้ใช้สิ่งเหล่านี้หรือไม่?

นอกจากนี้เราสามารถพูดได้หรือไม่ว่าโซลูชั่นระดับฮาร์ดแวร์ทั้งหมดสำหรับปัญหาส่วนที่สำคัญสามารถแบ่งได้เป็นสามส่วนคือการปิดใช้งานการขัดจังหวะการทดสอบและตั้งค่าและการสลับ?

คำตอบ:


13

ใช่คุณสามารถใช้การยกเว้นซึ่งกันและกันได้ด้วยการโหลดหน่วยความจำและคำแนะนำในการจัดเก็บเท่านั้น มีประเพณีอันยาวนานของการคิดค้นวิธีแก้ปัญหาที่ง่ายกว่าอย่างต่อเนื่องสำหรับปัญหานี้

รุ่นแรกสุดที่ฉันรู้จักเรียกว่า "โซลูชันของ 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ซึ่งแลมพออธิบายค่อนข้างขมขื่นในหน้าแรกของเขา

ดังนั้นเพื่อตอบคำถามที่สองของคุณ: ไม่มีโซลูชันระดับฮาร์ดแวร์มากกว่าสามหมวดหมู่สำหรับปัญหาส่วนที่สำคัญ (โดยใช้เพียงแค่โหลดและจัดเก็บเป็นหนึ่งเท่านั้นส่วนอื่น ๆ เกี่ยวข้องกับคำแนะนำเปรียบเทียบและสลับ, โหลดลิงค์ / เงื่อนไขร้านค้า คำแนะนำ (ใช้โปรโตคอลการเชื่อมโยงกันของแคชเพื่อทดสอบอะตอมมิกซิตี) และคำแนะนำการดึงและเพิ่ม) ในอีกแง่หนึ่งมีวิธีแก้ไขปัญหาเพียงประเภทเดียวเท่านั้น: ผู้ที่เกี่ยวข้องกับการรับกระบวนการแบบอะซิงโครนัสมากมาย .

(โปรดทราบว่าคำตอบนี้เป็นการแก้ไขคำตอบก่อนหน้านี้ของฉันอย่างมากสำหรับคำถามที่ต่างออกไป)


แน่นอนว่าสามารถขยายไปยังหน่วยความจำธุรกรรมโดยทั่วไปซึ่งครอบคลุมส่วนที่สำคัญทั้งหมดแทนที่จะเป็นเพียงการได้มาซึ่งล็อค ความแตกต่างระหว่างสิ่งที่รับประกันฮาร์ดแวร์ให้ดูเหมือนว่าสำคัญ; รับประกันความคืบหน้าในบางครั้ง (เช่นตัวแทนหนึ่งจะชนะการแข่งขันเพื่อให้ได้ล็อคในเวลาที่กำหนด) แต่แม้กระทั่งแนวคิดที่อ่อนแอที่เกี่ยวข้องกับความเป็นธรรมดูเหมือนจะมักจะเขวี้ยงซอฟต์แวร์ (ค่อนข้างเข้าใจ)
Paul A. Clayton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.