2011-08-07 14 views
3

私はローカル変数を割り当てないpthreadを使用しています。私はここには入りません。私はpthread_cancel()オプションが必要です。私が書いているスレッドは、それをサポートする必要があります(クリーンアップするリソースはありません。いつでも実行を停止することができます)。現時点では、pthread_cancelが実際にpthreadが実行を終了する前に戻り、スレッドのキャンセル後にしか触れない共有リソースに問題が発生するため、問題があります。pthread_cancelが終了するのを待って

私のpthreadが本当に結論づけられたときに私が知ることができる方法はありますか?私が見つけていない関数、または私が慣れていないパラメータがありますか?

pthread_cancel(thread_handle); 
pthread_join(thread_handle, NULL); 

thread_handleはすでに無効である可能性があるため)、トリックを行う、または保証されないということですか?

私はpthreadsにはかなり新しいので、ベストプラクティスは歓迎しています(既に学んだ「pthread_cancel()」を超えています:P)。

答えて

3

マニュアルページkernel.orgが実際に行っています。安全です。

s = pthread_cancel(thr); 
if (s != 0) 
    handle_error_en(s, "pthread_cancel"); 

/* Join with thread to see what its exit status was */ 

s = pthread_join(thr, &res); 
if (s != 0) 
    handle_error_en(s, "pthread_join"); 
1

参加可能スレッドでpthread_joinを呼び出すまで、そのtidは有効なままです。スレッドが結合可能である場合(pthread_cancelが安全でなければならない)、thread_handleは依然として有効でなければなりません。

スレッドが切り離された場合、pthread_cancelを呼び出すことは安全ではありません。あなたが呼び出したときにスレッドが終了した場合はどうなりますか?

関連する問題