2012-02-23 6 views
3

pthreads APIには、あるスレッドが自分自身や別のスレッドを一時停止するよう指示する方法がありますか?Pthreadsシグナルのような一時停止?

一時停止とは、実行を停止し、別のスレッドが再開を通知するまでスケジュールを停止することを意味します。

+0

どこか特定のポイントで一時停止しますか? – Tudor

答えて

6

pthread/POSIX Thread stackでは、pthread_killを使用して個々のスレッドに信号を送信できます。残念ながらそれは「停止」、「続行」、または「終了」を含んでいません。ノートを参照してくださいhere

スレッドを一時停止したい場合は、ミューテックスと条件変数の狡猾な式が最善の方法です。

+0

おかげで、あなたの恩恵を楽しむ;) –

+0

はいデビッドシュワルツ、その恩恵を楽しむ;) – Marty

6

この目的のために、mutexと条件変数を使用できます。一時停止するには、別のスレッドに伝えるために


  1. は、ミューテックスをロックします。

  2. 変数pauseをtrueに設定します。

  3. ミューテックスを解放します。


あなたが一時停止する必要があるかどうかを確認するには、次の

  1. をミューテックスをロックします。

  2. pause変数がtrueに設定されていることを確認してください。

  3. もしそうでなければ、ミューテックスをリリースして続行してください。

  4. もしそうなら、条件変数上のブロックとスレッドの一時停止を解除するには2


に進みます:

  1. は、ミューテックスをロックします。

  2. 変数をfalseに設定します。

  3. 条件変数をブロードキャストします。

  4. ミューテックスを解放します。

しかし、これはほとんど確かに分かりやすいことではありません。スレッドを一時停止する必要がある理由はありません。外部の問題はおそらく、プロセスが特定のタイプの作業をやめてしまうようなものです。それは、スレッドが他の作業を行うように指示することで行うべきであり、のいずれかを実行してからではなく、の作業を行う必要があります。

関連する問題