g ++バージョン4.4.3(Ubuntu 4.4.3-4ubuntu5
)とlibpthread v。2-11-1を使用しています。次のコードは、単にFoo()
を実行中のスレッドを作成し、すぐにそれを取り消しますスレッドを連続して作成したりキャンセルしたりするときの奇妙な動作
void* Foo(void*){
printf("Foo\n");
/* wait 1 second, e.g. using nanosleep() */
return NULL;
}
int main(){
pthread_t thread;
int res_create, res_cancel;
printf("creating thread\n);
res_create = pthread_create(&thread, NULL, &Foo, NULL);
res_cancel = pthread_cancel(thread);
printf("cancelled thread\n);
printf("create: %d, cancel: %d\n", res_create, res_cancel);
return 0;
}
私が手出力は次のようになります。
creating thread
Foo
Foo
cancelled thread
create: 0, cancel: 0
なぜ二Foo
出力? をpthread_create
の直後に呼び出してpthread APIを悪用していますか?もしそうなら、どのようにスレッドに触れることが安全であるかを私は知ることができますか?もし私がprintf()を2つの間に張っているのであれば、私はこの問題はありません。
MacOS 10.6.8で試してみました。 – Saphrosit