“完成后如何关闭线程?”
通过简单地从该函数返回或调用pthread_exit 函数。
请注意,调用return
还会导致堆栈被展开,并且在启动例程中声明的变量被破坏,因此它比pthread_exit
函数更可取:
An implicit call to pthread_exit() is made when a thread other than the thread in
which main() was first invoked returns from the start routine that was used to
create it. The function's return value shall serve as the thread's exit status.
有关更多信息,请查看:return() 与 pthread 启动函数中的 pthread_exit()
“确保没有任何东西被打开或运行”而不是确定你的线程是否仍在运行,你应该使用pthread_join 函数
等待它的终止。
这是一个例子:
void *routine(void *ptr) {
int* arg = (int*) ptr; // in C, explicit type cast is redundant
printf("changing %d to 7\n", *arg);
*arg = 7;
return ptr;
}
int main(int argc, char * const argv[]) {
pthread_t thread1;
int arg = 3;
pthread_create(&thread1, NULL, routine, (void*) &arg);
int* retval;
pthread_join(thread1, (void**) &retval);
printf("thread1 returned %d\n", *retval);
return 0;
}
输出
changing 3 to 7
thread1 returned 7