当我以下列方式使用pthread_create时会导致错误吗?
void myFunction(){
thread_t myThread;
pthread_create(&myThread,0,myRoutine,0);
}
我不确定局部变量myThread
的使用是否会导致错误,因为myFunction()
退出时它不再存在。
当函数退出时,内核中是否仍然可以使用myThread
的内存?
我不需要存储在myThread
中的线程ID,所以我不想分配内存并再次释放它。
答案 0 :(得分:3)
你不应该让一个线程“完成”,因为这肯定会导致问题。如果你希望线程刚刚完成就赢了,你应该至少使用pthread_detach
,此时线程完全是“独立的”,应该可以保留它。
答案 1 :(得分:2)
当我以下列方式使用
pthread_create
时,是否会导致错误?
是的:您现在无法在完成时加入该线程。这是资源泄漏,类似于丢失指向已分配内存的唯一指针。
如果您真的不想以受控方式关闭它,那么您可以致电pthread_detach
让它负责整理自己的资源;然后你可以放心地放弃线程句柄。
当函数退出时,内核中是否仍然可以使用
myThread
的内存?
没有。 pthread_t
只是用于访问线程资源的句柄。它不管理这些资源,除非您需要访问它们,否则它不需要存在。
答案 2 :(得分:2)
您还可以在创建PTHREAD_CREATE_DETACHED时将其作为线程属性的一部分传递。这样,您不必担心以后加入该线程。像这样:
pthread_t;
int status;
pthread_attr_t attr;
status = pthread_attr_init(&attr);
if (status != 0) {
fprintf(stderr, "pthread_attr_init() failed [status: %d]\n", status);
return 0;
}
status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (status != 0) {
fprintf(stderr, "pthread_attr_setdetachstate() failed [status: %d]\n", status);
return 0;
}
status = pthread_create(&t, &attr, myRoutine, 0);