web-dev-qa-db-ja.com

いつpthread_killではなくpthread_cancelを使用するのですか?

いつpthread_cancelではなくpthread_kill

26
Sashi

私はこれら2つはどちらも使用しませんが、それは個人的な好みです。

2つのうち、 pthread_cancel は、スレッドが pthread_setcancelstate()

言い換えれば、デッドロックを引き起こす可能性のある方法でリソースを保持しているときに、それが消えてはなりません。 pthread_kill()呼び出しは、signalを特定のスレッドに送信します。これは、キャンセル以外の理由でスレッドに非同期的に影響を与える方法ですそれ。

私のスレッドのほとんどは、とにかく作業をループし、フラグを定期的にチェックして、終了する必要があるかどうかを確認する傾向があります。それは、pthread_kill()が危険で、pthread_cancel()が存在しない世界で育ったためです。

私は、各スレッドが自身のリソースを完全に制御する必要があるという理論に同意します実行寿命を含みます。私は常にそれがデッドロックを回避します。そのために、スレッド間の通信にはミューテックスを使用し(真の非同期通信が必要になることはほとんどありません)、終了のフラグ変数を使用します。

32
paxdiablo