ある時点で、ミリ秒単位で posix pthread をスリープさせる方法は? これに最も適しているのは、usleep 関数または pthread_cond_timedwait を使用する方法です。
1 に答える
ちょっとした話
あなたはホテルに泊まっています。数時間後に目を覚ます必要があります。朝、一人でプールを利用したい場合、何か重要なことがある場合 ( からの偽のウェイクアップpthread_cond_wait
)、またはホテルのプールが自分のものである場合 (ミューテックスがロックされている場合) にのみ、ホテルの支配人がウェイクアップするようにします。
しかし、数時間後に起きたい場合は、目覚まし時計を設定し、目が覚めたときにアラームが鳴ったかどうかを確認するか、別の時間を飲むことができます. 時間が経過したかどうかだけで、他のリソースは気にしません。あなたは単にnanosleep()
。
待って、何?
ただ寝たいだけなら、usleep
またはで寝てnanosleep
ください。pthread_cond_wait
戻るときにミューテックスをロックするため、オーバーヘッドがあります。そのミューテックスがしばらく利用できない場合、他のスレッドに問題やデッドロックが発生した場合は、最初に必要だったよりも長く、または永久にスリープすることになります。
そうは言っても、ミューテックスで保護されたリソースを待って、スレッドが起動した直後にミューテックスを取得したい場合は、条件変数を使用する必要があります。
C++11
C++11 を使用している場合は、 を試してくださいstd::this_thread::sleep_for
。ただし、C++11 スレッド データ構造 (スレッド、ミューテックス、条件変数) と POSIX のものを混在させないでください。