2012-02-11 6 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/ :) –

答えて

2

std::unique_lock他のロックはコンストラクタでミューテックスを取得し、デストラクタで解放します。 lock.unlock()をコード内で手動で呼び出すと、効果的に2回呼び出されます。

この文を削除すると、コードが正しく動作するはずです。

+3

また、ロックはロックが解除されていることを知るために 'lk.unlock()'を呼び出してください。 (おそらくmutexを "lock"以外のものと呼ぶかもしれないので、それをロックと混同しないでください)。 –

関連する問題