pthread_join函数在执行后杀死线程还是需要调用pthread_cancel/pthread_exit?

Ana*_*and 2 c linux pthreads

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,这意味着线程已被杀死.

cda*_*rke 7

pthread_join不杀死线程,它等待线程完成.如果你想杀死一个线程然后使用pthread_kill.但这必须在此之前 完成pthread_join,否则线程已经退出.

pthread_cancel请求线程在下一个取消点终止,并且可能比使用更安全pthread_kill.

pthread_exit 退出当前线程.