2011-07-05 10 views
1

私はlinuxで作業していますが、pthread_rwlockを使用しています.pthread_rwlockは共有メモリに保存され、複数のプロセスで共有されています。これはほとんどうまく動作しますが、ロックを保持している間にプロセス(SIGKILL)を終了すると、ロックがまだ保持されているように見えます(読み取りロックか書き込みロックかにかかわらず)。プロセス間のpthread_rwlock:クラッシュ後の修復?

このような状態を認識し、場合によっては修復する方法はありますか?

答えて

1

本当の答えは、プロセスを停止するためのまともな方法を見つけることです。 SIGKILLでそれを殺すことはではないそれを行うためのまともな方法です。

この機能は、堅牢性(PTHREAD_MUTEX_ROBUSTなくrwlocksのためと呼ばれる、mutexesに指定されています。標準はそれを提供せず、kernel.orgはrwlocks上のページさえも持っていません。だから、私が言ったように:

  • が(扱うことができ、おそらく別の信号を?)プロセスを停止する別の方法を探す
  • リリースにあなたが
+0

SIGKILLを使用して、私のソリューションの堅牢性をテストしました。 – mooware

1

@cnicutarを終了し、ロックを - 本物」ということ答えはかなり疑わしいです。リソースを解放し、一貫性のあるマークを付けるというクロスプロセスの責任を処理するのはカーネルの仕事です。ユーザースペースは物事がうまくいかないときに効果的に仕事をすることができません。

誰もがうまくいけば、堅牢な機能は必要なくなりますが、堅牢なシステムでは、システムがバグのあるクライアントプロセスから落ちないようにしたいと考えています。

関連する問題