2012-02-11 369 views
6

我接收到錯誤:pthread_mutex_lock.c:62:__pthread_mutex_lock:斷言`互斥 - > __數據.__所有者== 0' 失敗

pthread_mutex_lock.c:62: __pthread_mutex_lock: Assertion `mutex->_data._owner == 0' failed.

我不能發現其中的任何原因。但是我不知道下面的代碼:

聲明:

std::mutex lock; 
std::condition_variable cond; 

鎖&的順序解鎖:

std::unique_lock<std::mutex> lk(lock); 

cond.wait(lk); 

lock.unlock(); 

如果我刪除此序列 - 一切工作正常,但沒有任何保護。我不確定我是否正確使用unique_lock

+2

未來,請嘗試發佈簡短但完整的程序 - http://sscce.org/ :) – 2012-02-11 13:13:30

回答

2

std::unique_lock和其他鎖在構造函數中獲取互斥鎖並在析構函數中釋放它。 您手動在代碼中調用了lock.unlock(),使其有效地被調用兩次。

刪除該語句後,您的代碼應該正常工作。

+3

或者,調用'lk.unlock()',以便鎖知道互斥鎖已解鎖。 (也許除了「鎖定」之外調用互斥鎖,所以你不要把它與鎖相混淆)。 – 2012-02-11 13:16:32