2011-01-23 5 views
5

POSIXのmutexは、Win32のCRITICAL_SECTIONと同等です。そのスコープは1つのプロセスに限定されています。 Win32のミューテックス(NTランドでは実際には "mutant"と呼ばれます)は、クロスプロセスロックメカニズムとして機能します。プロセス間ロックのpthreadsと同等のものは何ですか?POSIXのWin32のミューテックスに相当するものは何ですか?

+0

'CRITICAL_SECTION'は' pthread_spinlock_t'に近いので、mutexは 'WaitForSingleObject' /' ReleaseMutex'と 'pthread_mutex_t'を比較します。 –

+0

@ Steve-o:これら2つの違いは何ですか?私の理解はしても、クリティカルセクションとミューテックスの唯一の違いは、1つはプロセス内にあり、もう1つはクロスプロセスであるということです。次に、posixスピンロックとposix mutexの違いは何ですか? –

+0

@Billy:この回答はスピンロックビジーウェイト、mutexes yield http://stackoverflow.com/questions/195853/spinlock-versus-semaphore –

答えて

6

それはPTHREAD_PROCESS_SHAREDに設定pshared属性でpthread_mutex_tです。しかし、共有メモリーにこのようなミューテックスを置く責任があり、すべてのプロセスがアクセスできるので、win32 APIほどシンプルではありません。

おそらくwin32に近いのは、posixまたはsysvセマフォです。伝統的に、プロセス間の同期はファイルロックを使用して行われている。 flockまたはlockf(これは聞こえるほど速くはありません)

+0

スコープはスレッドにのみ適用されますか? 'pthread_attr_t'は' pthread_create'に渡すことしかできません。 'pthread_mutex_init'で' pthread_mutexattr_t'を使う必要があります。 –

+0

そうです、pthread_mutexattrのpsharedが必要です – nos

+0

ロックの遅さ(またはその欠如)に関するリンクがありますか?私はそれについてもっと詳しく調べましたが、興味深いものは見つかりませんでした。私たちは大きな共有ファイルを持つ大きなプロジェクトを持っており、ロックのためにいくつかのパフォーマンス上の問題があると思われますが、どのように見つけ出すのか分かりません。 –

0

クロスプロセス処理(パイプ、セマフォ、メッセージキュー、または共有メモリ)にIPCを使用する必要があります。 あなたのケースでは、名前付きセマフォがうまくいくと思います。詳細については:

man 7 sem_overview 
+0

私は共有メモリを使いたいです。しかし、共有メモリをロックする方法が必要です。 –

+0

sem_init()を使用すると、共有メモリのロックを実行できます。 –

+0

この無駄なセマフォを忘れてしまいます。共有メモリオブジェクトを作成し、そこにpsharedミューテックスを作成します。 –

関連する問題