4

lock-free algorithmミューテックスを回避するための共有メモリに使用したい。データを共有するプロセスが共有メモリを使用しています。プロセスがミューテックスをロックしてクラッシュすると、他のすべてのプロセスもクラッシュします。

リンクリストを使用してロックフリーアルゴリズムを実装している論文をいくつか読みました。しかし、共有メモリでは、このメモリブロックで使用するデータ構造を定義できません。このブロックへのポインタがあります。

したがって、私の状況でロックフリーアルゴリズムを適用するためのアイデアはありません。私はあなたからの助けが必要です。私の英語が非常に悪い場合は、ありがとうございます。

4

1 に答える 1

1

プロセスがミューテックスをロックしてクラッシュすると、他のすべてのプロセスもクラッシュします。

特にこのユース ケースには、堅牢なミューテックスがあります。

PTHREAD_MUTEX_ROBUST

堅牢なミューテックスの所有スレッドを含むプロセスがミューテックス ロックを保持している間に終了した場合、ミューテックスを取得する次のスレッドは、ロック関数からの戻り値 [EOWNERDEAD] によって終了について通知されます。堅牢なミューテックスの所有スレッドがミューテックス ロックを保持している間に終了した場合、ミューテックスを取得する次のスレッドは、戻り値 [EOWNERDEAD] によって終了について通知される場合があります。通知されたスレッドは、pthread_mutex_consistent() を呼び出して、ミューテックスによって保護されている状態を再び整合性のあるものとしてマークすることを試みることができます。その後の pthread_mutex_unlock() の呼び出しが成功すると、mutex ロックが解放され、他のスレッドが通常どおり使用できるようになります。pthread_mutex_consistent() を呼び出さずにミューテックスがロック解除された場合、永続的に使用できない状態になり、ミューテックスをロックしようとするすべての試みはエラー [ENOTRECOVERABLE] で失敗します。このようなミューテックスで許可される唯一の操作は、pthread_mutex_destroy() です。

于 2012-09-06T08:33:02.140 に答える