私はlinuxで作業していますが、pthread_rwlockを使用しています.pthread_rwlockは共有メモリに保存され、複数のプロセスで共有されています。これはほとんどうまく動作しますが、ロックを保持している間にプロセス(SIGKILL)を終了すると、ロックがまだ保持されているように見えます(読み取りロックか書き込みロックかにかかわらず)。プロセス間のpthread_rwlock:クラッシュ後の修復?
このような状態を認識し、場合によっては修復する方法はありますか?
私はlinuxで作業していますが、pthread_rwlockを使用しています.pthread_rwlockは共有メモリに保存され、複数のプロセスで共有されています。これはほとんどうまく動作しますが、ロックを保持している間にプロセス(SIGKILL)を終了すると、ロックがまだ保持されているように見えます(読み取りロックか書き込みロックかにかかわらず)。プロセス間のpthread_rwlock:クラッシュ後の修復?
このような状態を認識し、場合によっては修復する方法はありますか?
本当の答えは、プロセスを停止するためのまともな方法を見つけることです。 SIGKILL
でそれを殺すことはではないそれを行うためのまともな方法です。
この機能は、堅牢性(PTHREAD_MUTEX_ROBUST
)なくrwlocksのためと呼ばれる、mutexesに指定されています。標準はそれを提供せず、kernel.orgはrwlocks上のページさえも持っていません。だから、私が言ったように:
@cnicutarを終了し、ロックを - 本物」ということ答えはかなり疑わしいです。リソースを解放し、一貫性のあるマークを付けるというクロスプロセスの責任を処理するのはカーネルの仕事です。ユーザースペースは物事がうまくいかないときに効果的に仕事をすることができません。
誰もがうまくいけば、堅牢な機能は必要なくなりますが、堅牢なシステムでは、システムがバグのあるクライアントプロセスから落ちないようにしたいと考えています。
SIGKILLを使用して、私のソリューションの堅牢性をテストしました。 – mooware