GNU/Linux >> Linux の 問題 >  >> Linux

Pthread ミューテックス アサーション エラー

TLDR:破棄された/初期化されていないミューテックスをロックしていないことを確認してください。

OPには彼の答えがありますが、他の誰かが私と同じ問題を抱えている場合に備えて、私の問題を共有すると思いました.

アサーションが __pthread_mutex_lock にあることに注意してください ロック解除ではありません。これは、この問題を抱えている他のほとんどの人が、ミューテックスをロックしたスレッドとは別のスレッドでミューテックスのロックを解除していないことを示唆しています。破棄されたミューテックスをロックしているだけです。

私には、クラスがありました (Foo と呼びましょう) )静的コールバック関数を他のクラスに登録しました(Barと呼びましょう) )。コールバックに Foo への参照が渡されていました Foo のメンバーであるミューテックスを時折ロック/ロック解除していました .

この問題は Foo の後に発生しました Bar 中にインスタンスが破棄されました インスタンスはまだコールバックを使用していました。コールバックに存在しないオブジェクトへの参照が渡されたため、ガベージ メモリで __pthread_mutex_lock を呼び出していました。

注、私は C++11 の std::mutex を使用していました と std::lock_guard<std::mutex> 、しかし、私は Linux を使用していたので、問題はまったく同じでした。


4日連続で安定。これで勝利宣言です。答えは「愚かなユーザー エラー」です (上記のコメントを参照)。ミューテックスは、それをロックしたスレッドによってのみロック解除されるべきです。我慢してくれてありがとう。


私は同じ問題に直面し、グーグルは私をここに送りました。私のプログラムの問題は、いくつかの状況でミューテックスをロックする前に初期化していなかったということでした.

受け入れられた回答のステートメントは正当ですが、それがこの失敗したアサーションの原因ではないと思います。 pthread_mutex_lock でエラーが報告されているため (そして そうではありません ロックを解除します)

また、いつものように、エラーはコンパイラーではなくプログラマーのソース コードにある可能性が高くなります。


Linux
  1. pthreadsミューテックスとセマフォ

  2. とは :-!! Cコードで?

  3. MySQL データベースの名前を変更する

  1. Git クローンの失敗:サーバー証明書の検証に失敗しました

  2. Linux での I/O エラー:root としてディレクトリを削除できません

  3. rsync が遅いのはなぜですか?

  1. Bashスクリプトでのエラー処理

  2. WifiエラーWpa_supplicant?

  3. .desktopファイル。アプリケーションの起動中にエラーが発生しましたか?