4
วิธีการจัดสรรอุปกรณ์ลูปแบบอะตอม?
ฉันกำลังเขียนเชลล์สคริปต์บางตัวเพื่อจัดการกับอิมเมจดิสก์บางอย่างและฉันต้องใช้อุปกรณ์วนรอบเพื่อเข้าถึงอิมเมจดิสก์บางตัว อย่างไรก็ตามฉันไม่แน่ใจว่าจะจัดสรรอุปกรณ์ลูปอย่างถูกต้องโดยไม่เปิดเผยโปรแกรมของฉันให้อยู่ในสภาพการแข่งขันได้อย่างไร ฉันรู้ว่าฉันสามารถใช้losetup -fเพื่อรับอุปกรณ์ลูปที่ไม่ได้ถูกจัดสรรถัดไปจากนั้นจัดสรรอุปกรณ์ลูปนั้นดังนี้: ld=$(losetup -f) sudo losetup $ld myfile.img dostuffwith $ld อย่างไรก็ตามในกรณีที่ฉันต้องการเรียกใช้โปรแกรมหลายอินสแตนซ์ในเวลาเดียวกันนี่เป็นตัวอย่างหนังสือเรียนเกี่ยวกับสภาพการแข่งขันและนั่นทำให้ฉันรำคาญมาก หากฉันมีหลายอินสแตนซ์ของโปรแกรมนี้ทำงานอยู่หรือโปรแกรมอื่น ๆ ที่พยายามรับอุปกรณ์วนซ้ำแต่ละกระบวนการอาจไม่สามารถจัดสรรอุปกรณ์วนรอบก่อนการเรียกครั้งต่อไปlosetup -fซึ่งในกรณีนี้ทั้งสองกระบวนการคิดว่าการวนซ้ำเดียวกัน อุปกรณ์มีให้ แต่จะมีได้เพียงอันเดียวเท่านั้น ฉันสามารถใช้การซิงโครไนซ์ภายนอกสำหรับสิ่งนี้ แต่ฉันต้องการ (ถ้าเป็นไปได้) หลีกเลี่ยงความซับซ้อนเพิ่มเติม นอกจากนี้โปรแกรมอื่น ๆ ที่ใช้อุปกรณ์ลูปจะไม่เคารพการซิงโครไนซ์ใด ๆ ฉันจะหลีกเลี่ยงสภาพการแข่งขันที่เป็นไปได้นี้ได้อย่างไร โดยหลักการแล้วฉันต้องการค้นพบและผูกอุปกรณ์ลูปแบบอะตอมเช่นด้วยคำสั่งเช่น: ld=$(sudo losetup -f myfile.img) dostuffwith $ld อย่างไรก็ตามเมื่อฉันทำเช่นนั้น$ldไม่ได้รับการกำหนดเส้นทางอุปกรณ์ลูปและย้ายsudoออกในขณะที่sudo ld=$(losetup -f myfile.img)ให้ข้อผิดพลาดในการอนุญาต