คำถามติดแท็ก mutex

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


30
วิธีที่ถูกต้องในการสร้างแอปพลิเคชัน WPF อินสแตนซ์เดียวคืออะไร
การใช้ C # และ WPF ภายใต้. NET (แทนที่จะเป็นWindows Formsหรือ console) วิธีที่ถูกต้องในการสร้างแอปพลิเคชั่นที่สามารถเรียกใช้เป็นเพียงอินสแตนซ์เดียวคืออะไร? ฉันรู้ว่ามันมีบางอย่างเกี่ยวข้องกับบางสิ่งในตำนานที่เรียกว่า mutex ฉันแทบจะไม่สามารถหาคนที่รบกวนและหยุดอธิบายสิ่งเหล่านี้ได้ รหัสจำเป็นต้องแจ้งให้ทราบถึงอินสแตนซ์ที่กำลังทำงานอยู่ซึ่งผู้ใช้พยายามเริ่มต้นครั้งที่สองและอาจส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งใด ๆ หากมีอยู่
657 c#  .net  wpf  mutex 

10
Mutex คืออะไร
mutex เป็นแนวคิดการเขียนโปรแกรมที่ใช้บ่อยในการแก้ปัญหาหลายเธรด คำถามของฉันต่อชุมชน: Mutex คืออะไรและคุณใช้มันอย่างไร


8
รูปแบบที่ดีสำหรับการใช้ Global Mutex ใน C # คืออะไร
คลาส Mutex เข้าใจผิดมากและ Mutex ทั่วโลกยิ่งกว่านั้นมาก รูปแบบที่ดีและปลอดภัยที่จะใช้เมื่อสร้าง Global mutexes คืออะไร หนึ่งที่จะทำงาน เครื่องของฉันอยู่ในระบบ รับประกันว่าจะปล่อย mutex อย่างถูกต้อง เป็นทางเลือกไม่แขวนตลอดไปหากไม่ได้รับ mutex ข้อตกลงกับกรณีที่กระบวนการอื่นละทิ้ง mutex
377 c#  concurrency  mutex 



7
Recursive Lock (Mutex) กับ Non-Recursive Lock (Mutex)
POSIX อนุญาตให้ mutexes วนซ้ำ นั่นหมายความว่าเธรดเดียวกันสามารถล็อค mutex เดียวกันสองครั้งและจะไม่หยุดชะงัก แน่นอนว่ามันต้องปลดล็อคสองครั้งมิฉะนั้นจะไม่มีเธรดอื่นที่สามารถรับ mutex ได้ ไม่ได้ทุกระบบสนับสนุน pthreads ยังสนับสนุน mutexes recursive แต่ถ้าพวกเขาต้องการที่จะPOSIX สอดคล้องพวกเขาจะต้อง API อื่น ๆ (API ระดับสูงกว่า) มักจะเสนอ mutexes ซึ่งมักเรียกว่าล็อค ระบบ / ภาษาบางระบบ (เช่น Cocoa Objective-C) เสนอทั้ง mutex แบบเรียกซ้ำและไม่เรียกซ้ำ บางภาษาเสนอเพียงหนึ่งภาษาเท่านั้น เช่นใน Java mutexes จะเรียกซ้ำ (เธรดเดียวกันอาจสองครั้ง "ซิงโครไนซ์" บนวัตถุเดียวกัน) ขึ้นอยู่กับฟังก์ชันเธรดอื่น ๆ ที่พวกเขาเสนอการไม่มี mutexes แบบเรียกซ้ำอาจไม่มีปัญหาเนื่องจากพวกเขาสามารถเขียนได้อย่างง่ายดายด้วยตัวคุณเอง สิ่งที่ฉันไม่เข้าใจจริง ๆ : …

10
เหตุใดฟังก์ชันตัวแปรเงื่อนไขของ pthreads จึงจำเป็นต้องมี mutex
ฉันอ่านบนpthread.h; ฟังก์ชันเงื่อนไขที่เกี่ยวข้องกับตัวแปร (เช่นpthread_cond_wait(3)) ต้องการ mutex เป็นอาร์กิวเมนต์ ทำไม? เท่าที่ผมสามารถบอกได้ว่าผมจะได้รับการสร้าง mutex เพียงเพื่อใช้เป็นข้อโต้แย้งที่? Mutex นั้นควรทำอะไร?

8
ตัวอย่าง / กวดวิชา Mutex? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันใหม่กับมัลติเธรดและพยายามที่จะเข้าใจวิธีการทำงานของ mutex ทำ Googling มาก แต่ก็ยังมีข้อสงสัยว่ามันทำงานอย่างไรเพราะฉันสร้างโปรแกรมของตัวเองซึ่งการล็อคไม่ทำงาน หนึ่งในไวยากรณ์ที่ไม่เข้าใจง่ายของ mutex คือpthread_mutex_lock( &mutex1 );มันดูเหมือนว่า mutex กำลังถูกล็อคเมื่อสิ่งที่ฉันต้องการล็อคจริงๆคือตัวแปรอื่น ๆ ไวยากรณ์นี้หมายความว่าการล็อก mutex ล็อคขอบเขตของรหัสจนกว่า mutex จะถูกปลดล็อกหรือไม่? จากนั้นเธรดจะรู้ได้อย่างไรว่าพื้นที่ถูกล็อก [ อัพเดท: กระทู้รู้ว่าพื้นที่ถูกล็อคโดยการ ฟันดาบของหน่วยความจำ ] และปรากฏการณ์เช่นนี้ไม่ควรถูกเรียกว่าส่วนวิกฤต [ ปรับปรุง: วัตถุส่วนที่สำคัญมีอยู่ใน Windows เท่านั้นโดยที่วัตถุนั้นเร็วกว่า mutexes และสามารถมองเห็นได้เฉพาะเธรดที่ใช้งานเท่านั้น มิฉะนั้นส่วนสำคัญจะอ้างถึงพื้นที่ของรหัสที่ป้องกันโดย mutex ] ในระยะสั้นคุณสามารถช่วยด้วยโปรแกรมตัวอย่าง mutex ที่ง่ายที่สุดที่เป็นไปได้และคำอธิบายที่ง่ายที่สุดเกี่ยวกับตรรกะของวิธีการทำงาน ฉันแน่ใจว่านี้จะช่วยให้ความอุดมสมบูรณ์ของมือใหม่อื่น …

7
ความแตกต่างระหว่างตัวเลือกการซิงโครไนซ์เธรดต่าง ๆ ใน C # คืออะไร
บางคนสามารถอธิบายความแตกต่างระหว่าง: ล็อค (someobject) {} ใช้ Mutex ใช้เซมาฟอร์ ใช้การตรวจสอบ ใช้คลาสการซิงโครไนซ์. Net อื่น ๆ ฉันแค่คิดออกไม่ได้ ดูเหมือนว่าฉันสองคนแรกเหมือนกันหรือไม่

7
มันฉลาดที่จะแทนที่บูสต์ :: thread และ boost :: mutex ด้วย c ++ 11 เทียบเท่าหรือไม่?
แรงจูงใจ: เหตุผลที่ฉันคิดว่าผู้จัดการโครงการอัจฉริยะของฉันคิดว่าการเพิ่มเป็นอีกการพึ่งพาและมันน่ากลัวเพราะ "คุณขึ้นอยู่กับมัน" (ฉันพยายามอธิบายคุณภาพของการส่งเสริมแล้วเลิกหลังจากนั้นสักครู่ :( ) เหตุผลที่เล็กกว่าที่ฉันต้องการทำคือฉันต้องการเรียนรู้คุณสมบัติ c ++ 11 เพราะผู้คนจะเริ่มเขียนโค้ดลงไปดังนั้น: มีการแมป 1: 1 ระหว่าง#include<thread> #include<mutex>และเพิ่มการเทียบเท่าหรือไม่ คุณจะพิจารณาความคิดที่ดีที่จะเปลี่ยนสิ่งที่เพิ่มด้วย C ++ 11 สิ่ง การใช้งานของฉันเป็นพื้นฐาน แต่มีตัวอย่างเมื่อ std ไม่เสนอเพิ่มอะไรบ้าง หรือ (ดูหมิ่น) ในทางกลับกัน? PS ฉันใช้ GCC ดังนั้นส่วนหัวจึงอยู่ที่นั่น

5
HashSet พร้อมกันใน. NET Framework
ฉันมีคลาสต่อไปนี้ class Test{ public HashSet<string> Data = new HashSet<string>(); } ฉันต้องการเปลี่ยนฟิลด์ "ข้อมูล" จากเธรดที่แตกต่างกันดังนั้นฉันต้องการความคิดเห็นบางส่วนเกี่ยวกับการใช้งานเธรดที่ปลอดภัยในปัจจุบัน class Test{ public HashSet<string> Data = new HashSet<string>(); public void Add(string Val){ lock(Data) Data.Add(Val); } public void Remove(string Val){ lock(Data) Data.Remove(Val); } } มีวิธีแก้ปัญหาที่ดีกว่าไปยังฟิลด์โดยตรงและป้องกันไม่ให้เข้าถึงหลายเธรดพร้อมกันหรือไม่

5
การล็อก mutex ที่ปลดล็อกมีประสิทธิภาพเพียงใด Mutex มีราคาเท่าใด
ในภาษาระดับต่ำ (C, C ++ หรืออะไรก็ตาม): ฉันมีตัวเลือกระหว่างการมี mutexes หลายอัน (เช่น pthread ให้ฉันหรืออะไรก็ตามที่ไลบรารี่ของระบบดั้งเดิมจัดหาให้) หรืออันเดียวสำหรับวัตถุ มันมีประสิทธิภาพแค่ไหนในการล็อค mutex? คือมีกี่คำสั่งแอสเซมเบลอร์และโอกาสที่จะใช้เวลาเท่าไหร่ (ในกรณีที่มีการปลดล็อค mutex) Mutex มีค่าใช้จ่ายเท่าไหร่ เป็นปัญหาหรือไม่ที่จะมีmutex จำนวนมากจริงๆ หรือฉันสามารถโยนตัวแปร mutex ให้มากที่สุดเท่าที่ฉันมีได้ในintตัวแปรและมันก็ไม่สำคัญอะไร (ฉันไม่แน่ใจว่าความแตกต่างระหว่างฮาร์ดแวร์ต่างกันมากแค่ไหนถ้ามีฉันอยากรู้เกี่ยวกับมันด้วย แต่ส่วนใหญ่ฉันสนใจฮาร์ดแวร์ทั่วไป) ประเด็นก็คือโดยการใช้ mutex หลายตัวซึ่งแต่ละส่วนครอบคลุมเพียงส่วนหนึ่งของวัตถุแทนที่จะเป็น mutex เดียวสำหรับวัตถุทั้งหมดฉันสามารถป้องกันได้หลายบล็อก และฉันสงสัยว่าฉันควรจะไปไกลแค่ไหนกับเรื่องนี้ คือฉันควรพยายามที่จะป้องกันบล็อคที่เป็นไปได้จริง ๆ เท่าที่จะเป็นไปได้ไม่ว่าจะซับซ้อนกว่านี้มากเท่าใด การโพสต์บล็อกของ WebKits (2016) เกี่ยวกับการล็อคนั้นเกี่ยวข้องกับคำถามนี้มากและอธิบายความแตกต่างระหว่าง spinlock, ล็อคปรับตัว, futex และอื่น ๆ

9
ข้อความสั่งคืนควรอยู่ภายในหรือด้านนอกล็อคหรือไม่?
ฉันเพิ่งรู้ว่าในบางแห่งในรหัสของฉันฉันมีคำสั่งส่งคืนภายในล็อคและบางครั้งข้างนอก อันไหนดีที่สุด? 1) void example() { lock (mutex) { //... } return myData; } 2) void example() { lock (mutex) { //... return myData; } } ฉันควรใช้อันไหนดี
142 c#  .net  multithreading  mutex 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.