pthread キャンセルのコード サンプルを次に示します。
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *my_routine(void *arg) {
int i;
for (i = 0; i < 10; i++) {
printf("%d\n", i);
}
return NULL;
}
int main(void) {
pthread_t thread;
if (pthread_create(&thread, NULL, my_routine, NULL)) {
fprintf(stderr, "Cannot create pthread\n");
return 1;
}
usleep(20);
pthread_cancel(thread);
pthread_join(thread, NULL);
//fflush(stdout);
sleep(1);
return 0;
}
私はコンパイルします:
gcc -pthread -Wall threadtest.c -o threadtest
実行すると、 の後に 追加の番号が出力されることがありsleep(1)
ます。
この番号が重複している場合があります。
0
1
2
3
4
4 // printed after sleep(1)
時々そうではありません:
0
1
2
3
4
5 // printed after sleep(1)
I がのfflush(stdout)
前sleep(1)
にある場合、追加の番号がすぐに出力されます。
printf
スレッドをキャンセルするときのこの奇妙な動作を回避するにはどうすればよいですか?
ありがとうございました。