スレッドが2つあり、メインスレッドとスレッドB(メインによって作成されたスレッド)があるとします。 Bがmutexを取得した場合(pthread_mutexなど)、ロックを解除せずにpthread_exitを呼び出しています。では、ミューテックスはどうなりますか?それは無料になりますか?Mutexを取得したスレッドが終了するとどうなりますか?
15
A
答えて
14
10
は、ミューテックスをする際、特別な状態に入ることについて読むことができますロックを保持しているスレッドは終了し、次のスレッドはmutexを取得しようとするとEOWNERDEAD
というエラーが発生します。 mutexが保護している状態をクリーンアップし、pthread_mutex_consistent
を呼び出してmutexを再度使用可能にするか、またはpthread_mutex_unlock
を呼び出します(mutexを永久に使用できないようにします;それ以降の使用はENOTRECOVERABLE
を返します)。
堅牢ではないミューテックスの場合、ロックされたスレッドがロックを解除せずに終了すると、ミューテックスは永続的に使用できなくなります。標準(オースティン・グループ・トラッカーのissue 755への解決策を参照)では、mutexはロックされたままであり、その正式な所有権は引き続き終了したスレッドに属し、ロックしようとするスレッドはデッドロックします。別のスレッドがロックを解除しようとした場合、muttがPTHREAD_MUTEX_ERRORCHECK
属性で作成されていない限り、通常は未定義の動作です。この場合、エラーが返されます。
一方、実際の実装の多くは、実際には標準の要件を満たしていません。所有権を追跡するために使用されたスレッドIDが再利用された可能性があり、別のスレッド(おそらく新しいロック/アンロック要求を行うスレッド)を参照する可能性があるため、別のスレッドからmutexをロックまたはロック解除しようとすると、少なくともglibcのNPTLはこの動作を示すことが知られています。
関連する問題
- 1. スレッドが終了したらどうなりますか?
- 2. Qtでは、スレッドが終了するとオブジェクトはどうなりますか?
- 3. Javaでは、あるスレッドが終了した場合、他のスレッドはどうなりますか?
- 4. perlスクリプトが終了するとどうなりますか?
- 5. パブのプロセスIDを取得すると、そのスレッド/プロセスが終了します
- 6. スレッド:スレッドがジョブを終了する前に終了する
- 7. `func`が終了するとスレッドは自動的に終了しますか?
- 8. AJAXリクエストが終了する前にユーザーがブラウザを終了したりページを変更したりするとどうなりますか
- 9. 最初のスレッドが終了した後、どのスレッドがスケジュールされますか?
- 10. アプリケーションが終了するとスレッドが停止しますか?
- 11. スレッドが未処理例外を取得すると、CLRが終了する
- 12. スレッドが終了したかどうかをオペレーティングシステムがどのように理解していますか?
- 13. Scala - 子スレッドが終了したときにマルチスレッド、メインスレッドを終了する
- 14. 親スレッド終了時に子スレッドが終了する
- 15. どのスレッドが同時スレッドで最初に終了しましたか?
- 16. アプリケーションのすべてのアクティビティが終了したらどうなりますか?
- 17. プラグイン接続がパイプラインを終了した後はどうなりますか?
- 18. スレッドがJavaで終了したかどうかを知る方法?
- 19. Cのスレッドが既にロックを取得しようとするとどうなりますか?
- 20. アプリケーションがバックグラウンドのときにスレッドが終了しますか?
- 21. スレッドが終了せず、プログラムが終了しない
- 22. FXスレッドがJavaで終了した場合にスレッドを終了する最も効率的な方法
- 23. JSPの実行が終了するとどうなりますか?
- 24. すべてのスレッドを終了した後にアクティビティを終了します。
- 25. 終了したJavaスレッドの中断状態を取得する方法は?
- 26. 開始日の終了日と終了日を取得する
- 27. 子スレッドが実行を完了する前にメインスレッドが終了しますか?
- 28. データベーストランザクションを終了しないとどうなるのですか?
- 29. 子スレッドが終了すると、親スレッドはどのように通知されますか
- 30. .netメソッドから例外として、終了または終了しないエラーがありますか?
Merci Beaucoup !!!どうもありがとう !!! – Sadish
堅牢なミューテックスでない限り、別のスレッドはロックを解除できません。 –
Whoa、スレッドアフィニティを持たない「mutex」? 「放棄された」エラーステータスはありませんか? –