私はこの問題を先に進めようとしていますが、私の誤りではないようです。十分な大きさなので、コードを投稿することはできません。私はそれを私ができるほど良く説明しようとします。 まず、multithreaded server application
で、複数のクライアントから同時にリクエストを受け取り、AF_UNIX
ソケットを持つマスターワーカー(スレッドのプール)スタイルを使用して詳細を調べます。 それは多くの場合、このエラーを返す実行している間:Pthread mutexロックアサーションが失敗します
を[名前]:../nptl/pthread_mutex_lock.c:81:__pthread_mutex_lock:アサーション `ミューテックス - > __データ.__オーナー== 0' に失敗しました。
私はこのエラーを複製するか、valgrindまたはgdb(これは何度か試しました)でキャッチすることができません。 PTHREAD_MUTEX_INITIALIZER
で初期化されたいくつかのグローバルpthread_mutex_t
を使用し、を無効にすることはありません。何かが失敗し、私はスレッドから返すようにした場合
pthread_mutex_lock(&mutex);
- ::他
pthread_mutex_unlock(&mutex);
とreturn (void*) -1;
- :私はこのようなコードの周りに安全にロックし、ロックを解除してかなり確信して物事共有変数
pthread_mutex_unlock(&mutex);
と私はそれがに低いレベルの競合状態が原因で発生することがあることを読みましたファイルですが、わかりません。 ところで、私はこのアサーションが失敗する理由を理解するだろう総称
はい関数呼び出しが失敗する前にロックを保持していれば、ロックを解除して戻ります。私はエントリでロックをつかまえませんが、私はそれが必要な場所です。はい、 'pthread_join'の' void * 'に' -1'をキャストします。 – BetaRunner
自分が所有しているロックを解放しましたスレッドが削除されない場合はいいですか? – BetaRunner
私はチェックしないで、通常のpthreadミューテックスを使用します。すべてのスレッドはロックしようとし、取得した後、いくつかのことを行い、解放します。 – BetaRunner