ความแตกต่างระหว่าง Mutex กับเหตุการณ์ ความแตกต่างระหว่าง

Anonim

Mutex vs Event

ใน C # มีหลายตัวเลือกการซิงโครไนส์เธรดที่แตกต่างกัน ทั้งสองใช้กันอย่างแพร่หลายคือ mutex และ event สิ่งที่แน่นอนคือความแตกต่างระหว่างทั้งสอง? ที่หนึ่งเป็นตัวเลือกที่ดีกว่า?

ตัวเลือกของเหตุการณ์สามารถให้ตัวเลือกที่จะบล็อกได้จนกว่าเหตุการณ์จะออกอากาศดังนั้นชื่อ "event" "มันเหมือนกับการใส่อะไรบางอย่างให้นอนหลับและตื่นขึ้นมาก็ต่อเมื่อมีความสำคัญเกิดขึ้นเท่านั้น เหตุการณ์ไม่เหมือน mutexes เนื่องจาก mutexes ไม่มีตัวเลือกหรือฟังก์ชันการส่งสัญญาณ เหตุการณ์สามารถล้างสัญญาณได้เมื่อมีใครบางคนที่สามารถรอได้ได้รับการปลุกให้ตื่นขึ้น แม้ API จะสามารถอนุญาตให้มีตัวเลือกในการปิดกั้นจนกว่าจะมีการส่งสัญญาณเหตุการณ์ที่ต่างกันทั้งหมดหรือบางเหตุการณ์ นอกจากนี้เหตุการณ์เป็นวัตถุเคอร์เนล พวกเขาไม่ได้ "เบา" เมื่อเทียบกับ mutexes เหตุการณ์นั้นเป็นเคอร์เนลวัตถุที่มีสองรัฐ โดยปกติเหตุการณ์จะส่งสัญญาณถึงเหตุการณ์ที่เกิดขึ้นและบางครั้งอาจถึงจุดสิ้นสุดของการดำเนินการ I / O

"Mutex" ย่อมาจาก Mutual Exclusion เป็นรูปแบบของกลไกการประสานงานที่กำหนดขอบเขตสำหรับรีซอร์สที่ใช้ร่วมกัน คิดว่าเป็นรูปแบบของการทำธุรกรรม คุณไม่จำเป็นต้องรอจนกว่าคุณจะต้องการเข้าถึงแหล่งข้อมูลที่ใช้ร่วมกันไม่กี่แห่ง (เฉพาะในกรณีที่มีการเข้าถึงผู้อื่นแล้ว) คุณกำลังปิดกั้น mutex ประกอบด้วยสองรัฐแม้ว่าจะมีอยู่เพื่อนำไปสู่การยกเว้นซึ่งกันและกัน นี่คือตอนที่คุณต้องการป้องกันโค้ดที่มักจะอัปเดตแหล่งข้อมูลที่ใช้ร่วมกันจากส่วนที่มีการอ้างสิทธิ์ใน mutex กับส่วนที่จะเผยแพร่ นี้นำไปสู่ความจริงที่ว่าไม่มีด้ายอื่น ๆ สามารถผ่านส่วน

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

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

เหตุการณ์มีมากกว่าตัวแปรสภาพซึ่งแตกต่างจาก Mutex ซึ่งคล้ายกับ

ในบางคำศัพท์หรืออาจเป็นรูปแบบดั้งเดิมของ semaphore / mutex

สรุป:

1. ตัวเลือกของเหตุการณ์สามารถให้ตัวเลือกในการบล็อกได้จนกว่าเหตุการณ์จะออกอากาศดังนั้นชื่อ "event" “

2 เหตุการณ์นั้นเป็นเคอร์เนลวัตถุที่มีสองรัฐ โดยปกติเหตุการณ์จะส่งสัญญาณถึงเหตุการณ์ที่เกิดขึ้นและบางครั้งอาจถึงจุดสิ้นสุดของการดำเนินการ I / O

3 "Mutex" ย่อมาจาก Mutual Exclusion เป็นรูปแบบของกลไกการประสานงานที่กำหนดขอบเขตสำหรับรีซอร์สที่ใช้ร่วมกัน

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

5 เหตุการณ์มีมากกว่าตัวแปรสภาพซึ่งแตกต่างจาก Mutex ซึ่งคล้ายกับ

ในบางคำศัพท์หรืออาจเป็นรูปแบบดั้งเดิมของ semaphore / mutex