TLDR: 破棄された/初期化されていないミューテックスをロックしていないことを確認してください。
OPには彼の答えがありますが、他の誰かが私と同じ問題を抱えている場合に備えて、私の問題を共有すると思いました.
アサーションが__pthread_mutex_lock
ロック解除ではなく、含まれていることに注意してください。これは、この問題を抱えている他のほとんどの人が、ミューテックスをロックしたスレッドとは別のスレッドでミューテックスのロックを解除していないことを示唆しています。破棄されたミューテックスをロックしているだけです。
私にとってはFoo
、静的コールバック関数を他のクラス(と呼びましょう)に登録したクラス(と呼びましょうBar
)がありました。コールバックに への参照が渡されてFoo
おり、 のメンバーであるミューテックスを時折ロック/ロック解除していましたFoo
。
この問題は、インスタンスがまだコールバックを使用しているFoo
間にインスタンスが破棄された後に発生しました。Bar
コールバックには存在しないオブジェクトへの参照が渡されたため、ガベージ メモリで __pthread_mutex_lock を呼び出していました。
注意してください、私は C++11 のstd::mutex
とを使用しstd::lock_guard<std::mutex>
ていましたが、Linux を使用していたため、問題はまったく同じでした。