pthread_join()
函数执行后杀死线程还是需要调用pthread_cancel()
/ pthread_exit()
?
我正在调用pthread_cancel()
/ pthread_kill()
返回3,即没有使用thread_id附加的线程.
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
void * run (void *);
int main() {
pthread_t p1, p2;
int a = 9;
printf("%d\n", pthread_create(&p1, NULL, &run, (void*)&p1));
printf("%d\n", pthread_create(&p2, NULL, &run, (void*)&p2));
printf("%d\n", pthread_join(p1, NULL));
//usleep(1000);
printf("%d\n", pthread_join(p2, NULL));
printf("before exit\n");
printf("%d\n", pthread_cancel(p1));
printf("after exit\n");
printf("%d\n", pthread_cancel(p2));
printf("both thread exited\n");
printf("%d\n", pthread_join(p1, NULL));
printf("%d\n", pthread_join(p2, NULL));
printf("terminated\n");
printf("%d\n", pthread_kill(p1, 0));
printf("%d\n", pthread_kill(p2, 0));
printf("ext\n");
printf("%d\n", pthread_join(p1, NULL));
printf("%d\n", pthread_join(p2, NULL));
printf("jion\n");
return 0;
}
void *run (void *p) {
int *i = (int*)p;
printf("created i = %d\n", *i);
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码.在这个pthread_cancel上,所有函数返回3,这意味着线程已被杀死.
pthread_join
不杀死线程,它等待线程完成.如果你想杀死一个线程然后使用pthread_kill
.但这必须在此之前 完成pthread_join
,否则线程已经退出.
pthread_cancel
请求线程在下一个取消点终止,并且可能比使用更安全pthread_kill
.
pthread_exit
退出当前线程.