มิวเท็กซ์ vs Semaphore – ความแตกต่างระหว่างพวกเขา

ความแตกต่างที่สำคัญระหว่าง Mutex และ Semaphore

  • Mutex เป็นกลไกการล็อคในขณะที่ Semaphore เป็นกลไกการส่งสัญญาณ
  • Mutex เป็นเพียงวัตถุในขณะที่ Semaphore เป็นจำนวนเต็ม
  • Mutex ไม่มีชนิดย่อย ในขณะที่เซมาฟอร์มีสองประเภท: การนับเซมาฟอร์และเซมาฟอร์ไบนารี
  • Semaphore รองรับการปรับเปลี่ยนการดำเนินการรอและสัญญาณ ในขณะที่มิวเท็กซ์จะถูกปรับเปลี่ยนโดยกระบวนการที่อาจร้องขอหรือปล่อยทรัพยากรเท่านั้น
  • Semaphore ค่าจะถูกปรับเปลี่ยนโดยใช้การดำเนินการ wait () และ signal () ในทางกลับกัน การดำเนินการ Mutex จะถูกล็อคหรือปลดล็อค

ความแตกต่างระหว่าง Mutex และ Semaphore
ความแตกต่างระหว่าง Mutex และ Semaphore

ที่นี่ฉันได้วิเคราะห์ความแตกต่างระหว่าง Mutex และ Semaphore และจะประเมินข้อดีข้อเสียอย่างครอบคลุม

ข้อเท็จจริงทั่วไปเกี่ยวกับ Mutex และ Semaphore

จากการฝึกของฉัน นี่คือข้อเท็จจริงทั่วไปบางประการเกี่ยวกับ Mutex เทียบกับ Semaphore:

  • มีเพียงงานเดียวเท่านั้นที่สามารถรับ mutex ได้ ดังนั้น mutex จึงมีความเป็นเจ้าของ และมีเพียงเจ้าของเท่านั้นที่สามารถปล่อยมันได้
  • เหตุผลในการใช้ mutex และ semaphore แตกต่างกันอาจเนื่องมาจากความคล้ายคลึงกันในการนำไปใช้งาน mutex จึงถูกเรียกว่า binary semaphore
  • ความเข้าใจผิดอย่างหนึ่งที่ทราบกันดีคือ Mutexes และ Semaphores เกือบจะเหมือนกัน โดยมีข้อแตกต่างเพียงอย่างเดียวคือ Mutex สามารถนับถึง 1 ได้ในขณะนั้น Semaphoreสามารถนับ 0 ถึง N ได้
  • มีความไม่แน่นอนอยู่เสมอระหว่างสัญญาณไบนารีและ mutex คุณอาจได้ยินว่า mutex เป็นสัญญาณไบนารีซึ่งไม่ถูกต้อง

อะไรคือ a Semaphore?

เซมาฟอร์ เป็นเพียงตัวแปรที่ไม่เป็นลบและแชร์กันระหว่างเธรด เซมาโฟร์เป็นกลไกการส่งสัญญาณ และเธรดที่กำลังรอเซมาโฟร์สามารถส่งสัญญาณโดยเธรดอื่นได้ โดยใช้การดำเนินการอะตอมมิกสองอย่างคือ 1) รอ และ 2) สัญญาณสำหรับ การซิงโครไนซ์กระบวนการ.

A สัญญาณ อนุญาตหรือไม่อนุญาตการเข้าถึงทรัพยากร ซึ่งขึ้นอยู่กับวิธีการตั้งค่า

การใช้งานของ Semaphore

ในกรณีที่มีบัฟเฟอร์เดียว เราสามารถแยกบัฟเฟอร์ 4 KB ออกเป็นบัฟเฟอร์ 1 KB จำนวน XNUMX ชุดได้ Semaphore สามารถเชื่อมโยงกับบัฟเฟอร์ทั้งสี่นี้ได้ ซึ่งจะช่วยให้ผู้ใช้และผู้ผลิตสามารถทำงานกับบัฟเฟอร์ที่แตกต่างกันได้ในเวลาเดียวกัน

ข้อดีของการ Semaphore

ในทางปฏิบัติของฉัน นี่คือข้อดีที่สำคัญของการใช้เซมาฟอร์:

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

ข้อเสียของ Semaphores

นี่คือข้อเสียของเซมาฟอร์ที่ฉันพบ

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

Mutex คืออะไร?

Mutex รูปแบบเต็มคือ Mutual Exclusion Object เป็นเซมาฟอร์ไบนารีชนิดพิเศษที่ใช้สำหรับควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน ประกอบด้วยกลไกการสืบทอดลำดับความสำคัญเพื่อหลีกเลี่ยงปัญหาการผกผันลำดับความสำคัญที่ขยายออกไป ช่วยให้งานที่มีลำดับความสำคัญสูงกว่าในปัจจุบันถูกเก็บไว้ในสถานะที่ถูกบล็อกโดยใช้เวลาสั้นที่สุดเท่าที่จะเป็นไปได้ อย่างไรก็ตาม การสืบทอดลำดับความสำคัญไม่ได้แก้ไขการกลับลำดับความสำคัญ แต่จะลดผลกระทบให้เหลือน้อยที่สุดเท่านั้น

การใช้ Mutex

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

ข้อดีของ Mutex

จากสิ่งที่ฉันสังเกต นี่คือคุณประโยชน์หลักของ Mutex:

  • Mutex เป็นเพียงล็อคง่ายๆ ที่ได้รับก่อนเข้าสู่ส่วนวิกฤติแล้วปล่อยมัน
  • เนื่องจากมีเพียงเธรดเดียวเท่านั้นที่อยู่ในส่วนวิกฤติในช่วงเวลาหนึ่งๆ จึงไม่มีสภาวะการแข่งขัน และข้อมูลยังคงสอดคล้องกันอยู่เสมอ

ข้อเสียของ Mutex

ในทางปฏิบัติของฉัน ฉันได้ระบุข้อเสียหลายประการของ Mutex

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

ความแตกต่างระหว่าง Semaphore และมิวเท็กซ์

จากสิ่งที่ฉันได้เรียนรู้จากการทำงานร่วมกับพวกเขา นี่คือวิธี Mutexes และ Semaphoreแตกต่างกัน:

Semaphore เทียบกับ มูเท็กซ์
Semaphore เทียบกับ มูเท็กซ์
พารามิเตอร์ Semaphore มิวเท็กซ์
กลไก เป็นกลไกการส่งสัญญาณชนิดหนึ่ง มันเป็นกลไกการล็อค
ประเภทข้อมูล Semaphore เป็นตัวแปรจำนวนเต็ม Mutex เป็นเพียงวัตถุ
การเปลี่ยนแปลง การดำเนินการรอและสัญญาณสามารถปรับเปลี่ยนเซมาโฟร์ได้ ได้รับการแก้ไขโดยกระบวนการที่อาจร้องขอหรือปล่อยทรัพยากรเท่านั้น
การจัดการทรัพยากร หากไม่มีทรัพยากรใดว่าง กระบวนการจะต้องใช้ทรัพยากรที่จะดำเนินการรอ ควรจะรอจนกว่าจำนวนเซมาโฟร์จะมากกว่า 0 หากถูกล็อค กระบวนการต้องรอ ควรเก็บกระบวนการไว้ในคิว จำเป็นต้องเข้าถึงสิ่งนี้เฉพาะเมื่อมีการปลดล็อค mutex เท่านั้น
ด้าย คุณสามารถมีเธรดโปรแกรมได้หลายเธรด คุณสามารถมีเธรดโปรแกรมได้หลายเธรดในมิวเท็กซ์แต่ไม่พร้อมกันได้
กรรมสิทธิ์ ค่าสามารถเปลี่ยนแปลงได้โดยกระบวนการใดๆ ที่ปล่อยหรือรับทรัพยากร การล็อคอ็อบเจ็กต์จะถูกปล่อยโดยกระบวนการเท่านั้น ซึ่งได้รับการล็อคไว้แล้วเท่านั้น
ประเภท ประเภทของ Semaphore กำลังนับเซมาโฟร์และไบนารีเซมาโฟร์ Mutex ไม่มีชนิดย่อย
Operaการ Semaphore ค่าจะถูกแก้ไขโดยใช้การดำเนินการ wait () และ signal () อ็อบเจ็กต์ Mutex ถูกล็อคหรือปลดล็อค
การครอบครองทรัพยากร จะถูกครอบครองถ้าทรัพยากรทั้งหมดถูกใช้ไปแล้ว และกระบวนการร้องขอทรัพยากรดำเนินการรอ () และบล็อกตัวเองจนกว่าจำนวนซีมาโฟร์จะกลายเป็น >1 ในกรณีที่อ็อบเจ็กต์ถูกล็อคอยู่แล้ว กระบวนการที่ร้องขอทรัพยากรจะรอและเข้าคิวโดยระบบก่อนที่จะปลดล็อค

สรุป

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