マルチスレッドプログラムの場合、1つのスレッドがそれをどのように知ることができなくなったら?

マルチスレッドプログラムの場合、1つのスレッドがそれをどのように知ることができなくなったら?

私の考え:

(1)psを使ってLWPをチェックしますが、手動では効率的ではありません。 (2)各スレッドでtry-catchを設定します。正常に終了しない場合は、キャッチします。 (3)dying-threadがstd :: coutまたはメインスレッドにメッセージを送信させる。

他のより良いアイデア?

ありがとう

3

2 答え

スレッド関数の非常に早い段階で pthread_cleanup_push(3)を使用することができます。 pthread_cleanup_push に与えられた関数は、 "ウォッチャー"スレッドが拾うことができるいくつかのフラグを設定できます。 pthread_cleanup_pushpthread_exit によって尊重され、例外には束縛されません。

Edit: A second way to do this: Use pthread_key_create(3) with a destructor function and call pthread_setspecific(3) early in the thread function. The destructor function can signal the watching thread it's imminent death.

4
追加された

スレッド終了時にクリーンアップハンドラを実行するには、単にpthread_cleanup_pushとpthread_cleanup_popを使用します。これは、cancelation/pthread_exitイベントを捕捉します。

1
追加された