2016-08-24 5 views
1

私は、負のタイムアウトパラメータを持つ、いくつかのファイル記述子で不定なポーリングを行うpthreadを持っています。メインスレッドからpthreadを正常に終了するにはどうすればよいですか?

メインスレッドから、ポーリングスレッドに終了する必要があることを示すことができます。

私はいくつかの研究を行なったし、次のアプローチが見つかりました:

  1. 利用のpthread_cancel():それはすべての開催リソースやミューテックス

  2. 使用をクリアしていないの意図しない結果につながる可能性があるとして、これは推奨されたがフラグとしての変数をメインスレッドに設定します。ポーリングスレッドは繰り返しごとにこのフラグをチェックし、設定されている場合はpthread_exit()を呼び出して終了します。私のポーリングスレッドはループしないので、このアプローチは機能しませんが、単にファイル記述子を待って無期限にブロックします。

誰もがこの問題の優雅な解決策を提案できますか?

ありがとうございます! ASM

+2

信号終端のミックスにeventfdを追加しますか? –

+0

これは素晴らしい提案です。私はそれを試みることができます。ありがとう! –

答えて

5

pipe(2)で匿名パイプを作成し、そのファイル記述子がEOFを報告したときに終了するファイル記述子監視スレッドに、ポーリングされたファイル記述子に読み取り終了を追加させることができます。メインスレッドはスレッド終了時に書き込み終了を閉じます。

1

pthread_kill()でブロックスレッドに信号(例:SIGUSR1)を送信できます。 selectコールは負の値を返し、errnoEINTRに設定する必要があります。送信するシグナルのハンドラを設定することを忘れないでください。

関連する問題