1

ある時点で、ミリ秒単位で posix pthread をスリープさせる方法は? これに最も適しているのは、usleep 関数または pthread_cond_timedwait を使用する方法です。

4

1 に答える 1

6

ちょっとした話

あなたはホテルに泊まっています。数時間後に目を覚ます必要があります。朝、一人でプールを利用したい場合、何か重要なことがある場合 ( からの偽のウェイクアップpthread_cond_wait)、またはホテルのプールが自分のものである場合 (ミューテックスがロックされている場合) にのみ、ホテルの支配人がウェイクアップするようにします。

しかし、数時間後に起きたい場合は、目覚まし時計を設定し、目が覚めたときにアラームが鳴ったかどうかを確認するか、別の時間を飲むことができます. 時間が経過したかどうかだけで、他のリソースは気にしません。あなたは単にnanosleep()

待って、何?

ただ寝たいだけなら、usleepまたはで寝てnanosleepください。pthread_cond_wait戻るときにミューテックスをロックするため、オーバーヘッドがあります。そのミューテックスがしばらく利用できない場合、他のスレッドに問題やデッドロックが発生した場合は、最初に必要だったよりも長く、または永久にスリープすることになります。

そうは言っても、ミューテックスで保護されたリソースを待って、スレッドが起動した直後にミューテックスを取得したい場合は、条件変数を使用する必要があります。

C++11

C++11 を使用している場合は、 を試してくださいstd::this_thread::sleep_for。ただし、C++11 スレッド データ構造 (スレッド、ミューテックス、条件変数) と POSIX のものを混在させないでください。

于 2013-10-29T06:36:53.377 に答える