2017-11-06 10 views
-3

実行ファイルでpthreadを使用しようとしていますが、mutex :: lock()呼び出しでクラッシュしています。デバッガでは、__gthread_mutex_lock()への呼び出しが22の整数を返すstd_mutex.hでクラッシュが発生していることがわかります。pthreadロック戻りコード値とは何ですか?

私はそれを共有できないし、まだ小さなプログラムの問題です。この戻り値は、私が間違っている可能性があることを示唆していますか?

+0

http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_mutex_lock.html – user0042

+2

「これは独占的なプログラムなので、共有できないし、小さなプログラムでも問題を再現することはできない」そして誰かがあなたを助けることを期待していますか? – DimChtz

+0

[pthread \ _mutex \ _lock]が重複している可能性があります(Cで22を返します)。(https://stackoverflow.com/questions/30511046/pthread-mutex-lock-returns-22-in-c) – user0042

答えて

2

は、ここではいくつかの可能性がチェックするために、次のとおりです。

  1. ロックは既にこのスレッドによって保持されています。
  2. ロックは正しく初期化されませんでした。
  3. ロックは既に破棄されています。
  4. ロックを保持していないスレッドによってロックが解除されました。
  5. ロックのメモリが上書きまたは破損しました。
  6. ロックは、すでにロックを保持していたスレッドによって以前にロックされていました。
  7. ロックがコピーされました。
  8. ロックは動的に割り当てられましたが、静的に初期化されました。

ここでは、重要な情報がないことを前提にしています。たとえば、これが再帰的なmutex、プロセス共有のmutex、またはその他の特別なプロパティを持っているかどうかを私たちに教えてくれると仮定しています。

+0

リストありがとう!まさに私が探していたもの。 – dromodel

+0

私は単純なロック()の直後にunlock()を試みましたが、それでもクラッシュします。それは(1)、(4)を排除する。ロックは動的に割り当てられますが、静的には使用されません(8)。これはコンストラクタで初期化されたクラスメンバ変数ポインタで、(7)を削除したものです。 (2)は可能ですが、ドキュメントに初期化は必要ありません。 (5)は常に可能ですが、クリティカルセクションを削除するとクラッシュがなくなりますので、ほとんどありません (6)再ロックで何が問題になっていますか?以前はロックが解除されていた限り libstdC++は静的にリンクされており、関連している可能性があります。我々は回避策を構築しなければならなかった。 – dromodel

関連する問題