ความแตกต่างพื้นฐานระหว่างเซมาฟอร์และ mutex คือเซมาฟอร์เป็นกลไกการส่งสัญญาณเช่นกระบวนการทำงานการรอ () และสัญญาณ () เพื่อระบุว่าพวกเขากำลังได้รับหรือปล่อยทรัพยากรในขณะที่ Mutex เป็นกลไกการล็อคกระบวนการ วัตถุ mutex หากต้องการได้รับทรัพยากร มีความแตกต่างเพิ่มเติมระหว่างเซมาฟอร์และ mutex ให้เราคุยด้วยความช่วยเหลือของกราฟเปรียบเทียบที่แสดงด้านล่าง
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | สัญญาณ | mutex |
---|---|---|
ขั้นพื้นฐาน | สัญญาณเป็นกลไกการส่งสัญญาณ | Mutex เป็นกลไกการล็อค |
การดำรงอยู่ | สัญญาณเป็นตัวแปรจำนวนเต็ม | Mutex เป็นวัตถุ |
ฟังก์ชัน | สัญญาณอนุญาตให้เธรดโปรแกรมหลายโปรแกรมสามารถเข้าถึงอินสแตนซ์ที่ จำกัด ของทรัพยากรได้ | Mutex อนุญาตให้เธรดโปรแกรมหลายรายการเข้าถึงทรัพยากรเดียว แต่ไม่พร้อมกัน |
ความเป็นเจ้าของ | ค่าสัญญาณสามารถเปลี่ยนแปลงได้โดยกระบวนการใด ๆ ที่ได้มาหรือปล่อยทรัพยากร | การล็อกอ็อบเจ็กต์ Mutex ถูกปล่อยโดยกระบวนการที่ได้รับการล็อกเท่านั้น |
จำแนกประเภท | สัญญาณสามารถแบ่งออกเป็นการนับสัญญาณและสัญญาณสัญญาณแบบไบนารี | Mutex ไม่ได้จัดหมวดหมู่เพิ่มเติม |
การทำงาน | ค่าสัญญาณมีการแก้ไขโดยใช้การรอ () และการส่งสัญญาณ () | วัตถุ Mutex ถูกล็อคหรือปลดล็อคโดยกระบวนการร้องขอหรือปล่อยทรัพยากร |
ทรัพยากรที่ครอบครอง | หากมีการใช้ทรัพยากรทั้งหมดกระบวนการที่ร้องขอทรัพยากรจะเป็นการดำเนินการ wait () และบล็อกตัวเองจนกว่าจำนวนสัญญาณจะมากกว่าหนึ่ง | หากอ็อบเจ็กต์ mutex ถูกล็อกอยู่แล้วกระบวนการที่ร้องขอทรัพยากรจะรอและเข้าคิวโดยระบบจนกระทั่งล็อกถูกปล่อย |
ความหมายของสัญญาณ
สัญญาณเป็นเครื่องมือประสานกระบวนการ สัญญาณโดยทั่วไปคือ ตัวแปรจำนวนเต็ม S ที่เริ่มต้นกับจำนวนของทรัพยากรที่มีอยู่ในระบบและค่าของสัญญาณสามารถ แก้ไขได้ โดยสองฟังก์ชั่น รอ () และ สัญญาณ () นอกเหนือจากการเริ่มต้น
การดำเนินการรอ () และสัญญาณ () จะปรับเปลี่ยนค่าของสัญญาณที่ แยกไม่ ได้ หมายความว่าเมื่อกระบวนการแก้ไขค่าเซมาฟอร์ไม่มีกระบวนการอื่นใดที่สามารถปรับเปลี่ยนค่าเซมาฟอร์ได้ในเวลาเดียวกัน สัญญาณมีความโดดเด่นด้วยระบบปฏิบัติการในสองประเภท การนับเซมาฟอร์ และเซมา ฟอร์แบบไบนารี
ใน การนับเซ มาฟอร์ค่า เซ มาฟอร์ S จะเริ่มต้นตาม จำนวนของทรัพยากรที่ มีอยู่ในระบบ เมื่อใดก็ตามที่กระบวนการต้องการเข้าถึงทรัพยากรมันจะทำการดำเนินการ wait () บนเซมาฟอร์และ ลด ค่าเซมาฟอร์ลงทีละหนึ่ง เมื่อเผยแพร่ทรัพยากรจะทำการดำเนินการ signal () บนสัญญาณและ เพิ่ม ค่าของสัญญาณโดยหนึ่ง เมื่อเซมาฟอร์นับเป็น 0 หมายถึงทรัพยากรทั้งหมดถูกครอบครองโดยกระบวนการ หากกระบวนการจำเป็นต้องใช้ทรัพยากรเมื่อจำนวนสัญญาณเป็น 0 จะดำเนินการรอ () และ ถูกบล็อก จนกว่าค่าเซมาฟอร์จะมากกว่า 0
ในเซมา ฟอร์ไบนารี ค่าของเซมาฟอร์ช่วงระหว่าง 0 ถึง 1 มันคล้ายกับล็อค mutex แต่ mutex เป็นกลไกการล็อคในขณะที่สัญญาณเป็นกลไกการส่งสัญญาณ ในเซมาฟอร์ไบนารีถ้ากระบวนการต้องการเข้าถึงทรัพยากรมันจะทำการดำเนินการ wait () บนเซมาฟอร์และลดค่าเซมาฟอร์จาก 1 เป็น 0 เมื่อปล่อยทรัพยากรมันจะทำการดำเนินการ สัญญาณ () บนเซมาฟอร์และเพิ่มขึ้น ค่าเป็น 1 หากค่าเซมาฟอร์เป็น 0 และกระบวนการต้องการเข้าถึงทรัพยากรมันจะทำการดำเนินการ wait () และบล็อกตัวเองจนกระทั่งกระบวนการปัจจุบันที่ใช้ทรัพยากรปล่อยทรัพยากร
ความหมายของ Mutex
อ็อบเจกต์ Mutual Exclusion นั้นเรียกว่า Mutex จากการแยกคำซึ่งกันและกันเราสามารถเข้าใจได้ว่ากระบวนการเดียวเท่านั้นในแต่ละครั้งสามารถเข้าถึงทรัพยากรที่กำหนด วัตถุ mutex อนุญาตให้เธรดโปรแกรมจำนวนมากใช้ทรัพยากรเดียวกัน แต่ทีละรายการไม่พร้อมกัน
เมื่อโปรแกรมเริ่มต้นมันจะขอให้ระบบสร้างวัตถุ mutex สำหรับทรัพยากรที่กำหนด ระบบสร้างวัตถุ mutex ด้วยชื่อหรือ ID ที่ไม่ซ้ำกัน เมื่อใดก็ตามที่เธรดโปรแกรมต้องการใช้ทรัพยากรที่มีการล็อกบนวัตถุ mutex ให้ใช้ประโยชน์จากทรัพยากรและหลังการใช้งานมันจะปล่อยการล็อกบนวัตถุ mutex จากนั้นกระบวนการถัดไปจะได้รับอนุญาตให้ล็อควัตถุ mutex
ในขณะเดียวกันกระบวนการได้รับการล็อกบนวัตถุ mutex ไม่มีเธรด / กระบวนการอื่นสามารถเข้าถึงทรัพยากรนั้น หากอ็อบเจ็กต์ mutex ถูกล็อกอยู่แล้วกระบวนการที่ต้องการรับการล็อกบนอ็อบเจ็กต์ mutex ต้องรอและเข้าคิวโดยระบบจนกว่าอ็อบเจ็กต์ mutex จะถูกปลดล็อก
ความแตกต่างที่สำคัญระหว่างสัญญาณและ Mutex
- สัญญาณเป็นกลไกการ ส่งสัญญาณ เป็นการดำเนินการรอ () และสัญญาณ () ดำเนินการกับตัวแปรสัญญาณบ่งชี้ว่ากระบวนการได้รับทรัพยากรหรือปล่อยทรัพยากร ในอีกทางหนึ่ง mutex เป็นกลไกการ ล็อค เพื่อรับทรัพยากรกระบวนการต้องล็อควัตถุ mutex และในขณะที่ปล่อยกระบวนการทรัพยากรจะต้องปลดล็อควัตถุ mutex
- สัญญาณโดยทั่วไปจะเป็นตัวแปร จำนวนเต็ม ในขณะที่ mutex เป็น วัตถุ
- สัญญาณช่วยให้หัวข้อโปรแกรมหลายรายการในการเข้าถึง อินสแตนซ์ที่ จำกัด ของทรัพยากร ในทางกลับกัน Mutex อนุญาตให้เธรดโปรแกรมหลายรายการเข้าถึง ทรัพยากรที่ใช้ร่วมกันเดียว แต่ทีละรายการ
- ค่าตัวแปรสัญญาณสามารถปรับเปลี่ยนได้โดยกระบวนการ ใด ๆ ที่ได้มาหรือเผยแพร่ทรัพยากรโดยการดำเนินการรอ () และการดำเนินงานสัญญาณ () ในทางกลับกันการล็อกที่ได้รับบนวัตถุ mutex สามารถปล่อยได้โดยกระบวนการที่ได้รับการล็อคบนวัตถุ mutex เท่านั้น
- สัญญาณมีสองประเภท นับสัญญาณและสัญญาณสัญญาณไบนารี ซึ่งค่อนข้างคล้ายกับ mutex
- ค่าตัวแปรสัญญาณมีการแก้ไขโดยการดำเนินการ รอ () และ สัญญาณ () นอกเหนือจากการเริ่มต้น อย่างไรก็ตามวัตถุปิดเสียงถูกล็อคหรือปลดล็อคโดยกระบวนการที่ได้รับหรือปล่อยทรัพยากร
- หากกระบวนการทั้งหมดได้มาซึ่งทรัพยากรและไม่มีทรัพยากรใดว่างกระบวนการที่ต้องการรับทรัพยากรจะดำเนินการ wait () การดำเนินการกับตัวแปรสัญญาณและ บล็อก ตัวเองจนกว่าจำนวนสัญญาณจะมากกว่า 0 แต่ถ้าวัตถุ mutex อยู่แล้ว ถูกล็อกจากนั้นกระบวนการที่ต้องการรับทรัพยากร จะรอ และ รอ คิว จากระบบจนกระทั่งทรัพยากรถูกปล่อยออกมาและวัตถุ mutex จะถูกปลดล็อก
สรุป:
สัญญาณเป็นตัวเลือกที่ดีกว่าในกรณีที่มีทรัพยากรหลายอินสแตนซ์พร้อมใช้งาน ในกรณีของ mutex ทรัพยากรที่ใช้ร่วมกันเป็นตัวเลือกที่ดีกว่า