そのスレッドが (デストラクタで) 終了するときに、スレッドが保持するミューテックスを自動的に解放する簡単な方法はありますか?
私が取っているアプローチは、それを保持するスレッドの ID を保持する各ミューテックスの構造を作成し、デストラクタでこのリストをスキャンし、ミューテックスが終了中のスレッドと一致する場合はそれを解放することです。しかし、これには実際には競合状態があると考えています。ミューテックスをロックした後、データ構造を設定する前にデストラクタが呼び出されるとどうなりますか?
pthread_mutexattr_setrobust_np も調べましたが、np 関数は移植性がなく、過去に問題があったことを理解しています。
参考までに、各スレッドは TCP/IP 接続に関連付けられており、この接続を介した要求に応じてロック/ロック解除が発生します。接続が異常終了した場合は、クリーンアップする必要があります。つまり、保持されているロックを解放する必要があります。