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

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

6
ตัวอย่างสำหรับ boost shared_mutex (การอ่านหลายครั้ง / การเขียนหนึ่งครั้ง)?
ฉันมีแอปมัลติเธรดที่ต้องอ่านข้อมูลบ่อยครั้งและมีการอัปเดตข้อมูลเป็นครั้งคราว ตอนนี้ mutex ช่วยให้เข้าถึงข้อมูลนั้นได้อย่างปลอดภัย แต่มีราคาแพงเพราะฉันต้องการให้หลายเธรดสามารถอ่านพร้อมกันได้และล็อคเฉพาะเมื่อจำเป็นต้องอัปเดตเท่านั้น (เธรดการอัปเดตอาจรอให้เธรดอื่นเสร็จสิ้น) . ฉันคิดว่านี่คือสิ่งที่boost::shared_mutexควรทำ แต่ฉันไม่ชัดเจนในการใช้งานและยังไม่พบตัวอย่างที่ชัดเจน ใครมีตัวอย่างง่ายๆที่ฉันสามารถใช้เริ่มต้นได้บ้าง?

8
มี Mutex ใน Java หรือไม่?
มีวัตถุ Mutex ใน java หรือวิธีสร้างหรือไม่? ฉันกำลังถามเนื่องจากวัตถุ Semaphore ที่เริ่มต้นด้วยใบอนุญาต 1 ใบไม่ได้ช่วยฉัน ลองนึกถึงกรณีนี้: try { semaphore.acquire(); //do stuff semaphore.release(); } catch (Exception e) { semaphore.release(); } หากมีข้อยกเว้นเกิดขึ้นเมื่อได้รับครั้งแรกการเปิดตัวในบล็อกจับจะเพิ่มการอนุญาตและสัญญาณไม่ได้เป็นสัญญาณไบนารีอีกต่อไป วิธีที่ถูกต้องจะเป็นอย่างไร try { semaphore.acquire(); //do stuff } catch (Exception e) { //exception stuff } finally { semaphore.release(); } รหัสข้างต้นจะทำให้มั่นใจได้ว่าสัญญาณจะเป็นไบนารีหรือไม่?



7
Mutexes จำเป็นใน JavaScript หรือไม่?
ฉันได้เห็นลิงค์นี้: การดำเนินการร่วมกันยกเว้นใน JavaScript ในทางกลับกันฉันได้อ่านว่าไม่มีเธรดในจาวาสคริปต์ แต่นั่นหมายความว่าอย่างไร? เมื่อเหตุการณ์เกิดขึ้นพวกเขาสามารถขัดจังหวะได้ที่ไหนในโค้ด และถ้าไม่มีเธรดใน JS ฉันจำเป็นต้องใช้ mutexes ใน JS หรือไม่? โดยเฉพาะอย่างยิ่งฉันสงสัยเกี่ยวกับผลกระทบของการใช้ฟังก์ชันที่เรียกโดยsetTimeout()และXmlHttpRequestของonreadystatechangeตัวแปรที่เข้าถึงได้ทั่วโลก

4
PTHREAD_MUTEX_INITIALIZER เทียบกับ pthread_mutex_init (& mutex, param)
มีความแตกต่างระหว่าง pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; หรือ pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); ฉันปลอดภัยเพียงพอหรือไม่หากใช้เพียงวิธีแรก หมายเหตุ:คำถามของฉันส่วนใหญ่หมายถึงโปรแกรมขนาดเล็กมากซึ่งสิ่งที่ฉันจะทำมากที่สุดคือเชื่อมต่อไคลเอนต์หลายรายเข้ากับเซิร์ฟเวอร์และแก้ไขข้อสงสัยด้วยเธรดของผู้ปฏิบัติงาน
92 c  ubuntu  pthreads  mutex 

5
ฉันจะจัดการกับ mutexes ในประเภทที่เคลื่อนย้ายได้ใน C ++ อย่างไร?
ตามการออกแบบstd::mutexไม่สามารถเคลื่อนย้ายหรือคัดลอกได้ ซึ่งหมายความว่าคลาสที่Aถือ mutex จะไม่ได้รับตัวสร้างการย้ายเริ่มต้น ฉันจะทำให้ประเภทนี้Aเคลื่อนย้ายได้ด้วยวิธีที่ปลอดภัยต่อเธรดได้อย่างไร

1
std :: lock_guard จะเร็วกว่า std :: mutex :: lock () ได้อย่างไร?
ฉันโต้เถียงกับเพื่อนร่วมงานเกี่ยวกับ lock_guard และเขาเสนอว่า lock_guard นั้นน่าจะช้ากว่า mutex :: lock () / mutex :: unlock () เนื่องจากราคาของ instantiate และทำให้ชั้น lock_guard ลดลง จากนั้นฉันก็สร้างการทดสอบอย่างง่ายและแปลกใจรุ่นที่มี lock_guard นั้นเร็วกว่ารุ่นที่มี mutex :: lock () / mutex :: unlock () เกือบสองเท่า #include <iostream> #include <mutex> #include <chrono> std::mutex m; int g = 0; void func1() { m.lock(); g++; m.unlock(); …
9 c++  mutex 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.