2011-07-28 14 views
1

UNIX OSでSysVセマフォを使用すると、セマフォの値が0になるまでプロセスが待機するアルゴリズムを実装できます(詳細はman semopを参照)。さて、誰もが他の同期APIを使用するほうがいいと言われるので、私の質問は、pthreads、POSIXセマフォー、または他の同様のAPIを使って同じ動作をどうやって得ることができるのでしょうか?可能でない場合は、SysVセマフォの使用について心配すべきですか?0のセマフォ同期0

EDIT:スレッドがpthreadを使用して作成されたマルチスレッドのシナリオを指しています。

答えて

0

Sysvセマフォは、マルチプロセス同期に最適です。代わりに落ちることはありません。

単一のプロセスを使用してスレッドを使用する場合、sysvセマフォは大きなオーバーヘッドを必要とし、グローバルシステムリソースを消費します。 POSIXセマフォを使うだけです。

+0

質問を編集しました。私はマルチスレッドのシナリオに入っています。私はposixセマフォを使用することができますが、質問に記述されているように、セマフォの値0の同期を取得する明白な方法はありません。 – Raffo

+0

@Rafflo:セマフォとは対照的に、バリアをエミュレートしようとしていますか?つまり、待機中のリソースは、バリアが0に達すると実行する準備が整いました。 –

+0

はい、おそらくバリアを使用して同じことを達成できます。しかし、私は現在、pthreadにメモリバリアーが実装されていないOSXを利用しています。別のことは、セマフォが到達する値を認識していないことです。スレッドが0になるまでスレッドを停止させたいだけです。 – Raffo

関連する問題