สัญญาณกับ Mutex
Semaphore เป็นโครงสร้างข้อมูลที่ใช้เพื่อให้แน่ใจว่าหลายกระบวนการไม่เข้าถึงทรัพยากรทั่วไปหรือส่วนที่สำคัญในเวลาเดียวกันในสภาพแวดล้อมการเขียนโปรแกรมแบบคู่ขนาน สัญญาณถูกใช้เพื่อหลีกเลี่ยงการล็อคตายและสภาพการแข่งขัน Mutex (Mutual Exclusion Object) ยังใช้เพื่อหลีกเลี่ยงการเข้าถึงทรัพยากรทั่วไปพร้อมกันโดยกระบวนการหลายอย่างพร้อมกัน
สัญญาณคืออะไร
Semaphore เป็นโครงสร้างข้อมูลที่ใช้ในการแยกส่วนที่สำคัญร่วมกัน สัญญาณส่วนใหญ่สนับสนุนการดำเนินการสองอย่างที่เรียกว่ารอ (รู้จักกันในชื่อ P) และสัญญาณ (รู้จักกันในชื่อ V)การดำเนินการรอจะบล็อกกระบวนการจนกว่าสัญญาณจะเปิดและการทำงานของสัญญาณจะอนุญาตให้กระบวนการอื่น (เธรด) เข้าสู่ สัญญาณแต่ละอันสัมพันธ์กับคิวของกระบวนการรอ เมื่อเธรดเรียกการดำเนินการรอ หากสัญญาณเปิดอยู่ เธรดสามารถดำเนินการต่อได้ ถ้าสัญญาณถูกปิดเมื่อมีการเรียกการดำเนินการรอโดยเธรด เธรดจะถูกบล็อกและต้องรอในคิว การทำงานของสัญญาณจะเปิดสัญญาณ และหากมีเธรดที่รออยู่ในคิวอยู่แล้ว กระบวนการนั้นก็จะได้รับอนุญาตให้ดำเนินการต่อ และหากไม่มีเธรดที่รออยู่ในคิว สัญญาณจะถูกจดจำสำหรับเธรดถัดไป สัญญาณมีสองประเภทที่เรียกว่า mutex semaphores และ semaphores การนับ Mutex semaphores อนุญาตให้เข้าถึงทรัพยากรเพียงครั้งเดียวและนับ semaphores อนุญาตให้หลายเธรดเข้าถึงทรัพยากร (ซึ่งมีหลายหน่วยที่พร้อมใช้งาน)
Mutex คืออะไร
เมื่อแอปพลิเคชันคอมพิวเตอร์เริ่มทำงาน มันจะสร้าง mutex และแนบไปกับทรัพยากรเมื่อทรัพยากรถูกใช้โดยเธรด ทรัพยากรนั้นจะถูกล็อคและเธรดอื่นไม่สามารถใช้งานได้ หากเธรดอื่นต้องการใช้ทรัพยากรเดียวกัน เธรดนั้นจะต้องส่งคำขอ จากนั้นเธรดนั้นจะถูกวางในคิวจนกว่าเธรดแรกจะเสร็จสิ้นด้วยทรัพยากร เมื่อเธรดแรกเสร็จสิ้นด้วยทรัพยากร การล็อกจะถูกลบออก และเธรดที่รออยู่ในคิวสามารถเข้าถึงทรัพยากรได้ หากมีหลายเธรดที่รออยู่ในคิว เธรดเหล่านั้นจะได้รับการเข้าถึงแบบหมุนเวียน ในทางปฏิบัติ เมื่อ mutex สลับการเข้าถึงทรัพยากรระหว่างหลายเธรด จะเห็นได้เนื่องจากหลายเธรดกำลังใช้ทรัพยากรในเวลาเดียวกัน แต่ภายในมีเธรดเดียวเท่านั้นที่เข้าถึงทรัพยากรในเวลาที่กำหนด
Semaphore กับ Mutex ต่างกันอย่างไร
แม้ว่าทั้งเซมาฟอร์และอ็อบเจ็กต์ mutex จะใช้เพื่อให้เกิดการยกเว้นร่วมกันในสภาพแวดล้อมการเขียนโปรแกรมแบบขนาน แต่ก็มีความแตกต่างบางประการออบเจ็กต์ mutex อนุญาตให้เธรดเดียวใช้ทรัพยากรหรือส่วนที่สำคัญ ในขณะที่สัญญาณอนุญาตการเข้าถึงทรัพยากรพร้อมกันจำนวนจำกัด (ภายใต้จำนวนสูงสุดที่อนุญาต) สำหรับวัตถุ mutex เธรดอื่นที่ต้องการเข้าถึงทรัพยากรต้องรอในคิว จนกว่าเธรดปัจจุบันจะเสร็จสิ้นโดยใช้ทรัพยากร