2012-02-29 19 views
2

pthread_cond_waitはpthread_cond_signal/pthread_cond_broadcastによって呼び起こされるように、呼び出しスレッドを待機状態にしますか?pthread_cond_waitはスレッドを待機状態にします

また、sem_waitはスレッドを待機状態にしますか?私が正しく理解していれば、mutexのacquire/releaseメソッドはmutex上でスレッドを連続的にポーリングし、スレッドを待機状態にしません。

答えて

2

はい、成功した場合、スレッドは通知されるまで待機します。これがコールの目的です。セマフォをデクリメントすることはできません場合

sem_waitは待ち状態にスレッドを配置します。それが高い状態にある場合、コールはすぐに戻ります。

ほとんどの状況で、ロックがビジー待機またはスケジューラの降伏によって実装されているかどうかは気にする必要はありません。いずれにしても、保証された動作が得られます。一般に、ライブラリ実装者は、実行しているプラ​​ットフォーム上で利用可能な最も効率的な方法を選択します。ビジー状態になっている場合(複数のコアがあり、予想される待ち時間が短い場合もある)もあります。

+0

はい、ロックの動作を知っていると、より良いアルゴリズムを書くのに役立ちます – user236215

0

はい、pthread_cond_waitのを呼び出しタスクは()待機状態になります。現在のLinuxの内部で

pthread_cond_wait atomically releases mutex and cause the 
    calling thread to block on the condition variable cond 

を、それが低いものを行うためのfutexを使用しています。

sem_waitは、 がコール時に0の値を持つ場合、 がセマフォのデクリメントを実行できるようになるまで、タスクをブロックします。

関連する問題