簡體   English   中英

如何在不同線程中使用 std::mutex?

[英]How to use std::mutex in different threads?

如何使用互斥體正確編寫多線程代碼:

std::mutex m, m2;    

... thread
m2.lock(); 
if ((++reference) == 1) m.lock(); 
m2.unlock();

... differenet thread
m2.lock();
if ((reference--) == 0) m.unlock(); // error here
m2.unlock ();

當我調用 m.unlock() Visual Studio 2012 時會引發錯誤 R6010。 Mutex m2 工作正常,因為它在一個線程中鎖定和解鎖。

我試圖用 std::contidional_variable 替換代碼,但它在開始時沒有得到通知,第一次進入 cond_var.wait_one 會無限等待。

UPD:替換為conditional_variable,現在一切正常。 文章: C++0x 沒有信號量? 如何同步線程?

Mutex 需要由擁有線程(鎖定它的線程)解鎖:

如果互斥鎖當前未被調用線程鎖定,則會導致未定義的行為。 ( http://www.cplusplus.com/reference/mutex/mutex/unlock/ )

您需要使用條件變量 - 我認為圍繞它構建一個信號量實現在您的情況下會很好。 請參閱此處接受的答案: C++0x has no semaphores? 如何同步線程?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM