1

Windows アプリケーションを Linux に移植していますが、同期の問題があります。

Windows では、共有メモリ ブロックへのアクセスを同期するために、システム レベルの名前付きミューテックスを使用しています。

Linuxでそれをエミュレートするにはどうすればよいですか? semget を使用して SystemV セマフォを作成しました。問題は、再入可能ではないことです。既に保持している場合、Windows とは異なり、ブロックされます。これに参照カウントを追加することもできますが、その場合はアクセスを同期する必要があります。つまり、別の (今回は現在のプロセスのみの) ミューテックスを意味します。

再入可能なプロセス間ロックを提供するクラスはどこかにありますか (おそらく Boost で)?

ところで、ファイル ロックの使用はおそらく遅すぎるため、受け入れられません (2 つのプロセス間の超低遅延通信が必要です)。

4

2 に答える 2

6

共有(プロセス間)、再帰 を使用できますpthread_mutex_t。通常のpthread_mutex(共有メモリに格納されている)を作成し、フラグを使用pthread_mutexattr_settypeしてその属性を設定してから、フラグを使用してPTHREAD_MUTEX_RECURSIVE呼び出します。pthread_mutexattr_setpsharedPTHREAD_MUTEX_SHARED

これにより、再入可能なプロセス間ロックが提供されます。

于 2009-11-17T13:59:01.990 に答える
1

あなたはfutexからあなた自身を構築することを試みることができます。このtarballのusersem.cを参照してください。

于 2009-11-17T13:37:39.903 に答える