2016-11-30 5 views
0

私はこの宿題を解決するのに苦労しています。 xが条件変数であり、xがセマフォであるときに、別のスレッドの1つのスレッド以降のx.wait()を呼び出すと、別の結果が生成されますか?条件変数対セマフォの例

この特定のケースでは、xが条件変数かセマフォであるかどうかは関係ありません。

ありがとうございました!

答えて

0

セマフォにはアトミック操作で保護された状態がありますが、条件変数(CV)には独自の状態はなく、保護されていません(通常、プログラムは独自の複雑な共有状態を持っていますしたがって、それを "手動で"維持する必要があります)。

CVを正しく使用するには、シグナルと待機の両方の操作が保護されている必要があります(関連するmutexロックによって囲まれています)。待機中のスレッドは、というシグナリングを見逃している可能性があります。したがって、プログラムはCV上で適切なロックシーケンスを確保する必要があります。

一方、セマフォー操作は開発者から隠されており、コードはより簡単であり、CVはのように間違っていることはありませんが、非常に単純な/小さな共有状態も非常に特殊な操作で維持されます。

+0

[mutexと条件変数からセマフォを構築することができます](http://stackoverflow.com/a/4793662/412080)どちらもプロセス共用で共有メモリに置くことができ、プロセス間通信メカニズムを提供します。 –

+0

@MaximEgorushkin確かに、別のものから1つを構築することができます(それはパフォーマンスの過剰なものです)が、IPCで標準/ネイティブCVを見たいと思います。私はpthread_cond_initにこのようなオプションはありません。 – mariusm

+1

プロセスの共有mutexと条件変数は、現在何十年にも標準化されています。 http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_condattr_setpshared.html –