当我以下列方式使用 pthread_create 时可能会导致错误吗?
void myFunction(){
thread_t myThread;
pthread_create(&myThread,0,myRoutine,0);
}
我不确定局部变量的使用是否myThread
会导致错误,因为它在myFunction()
退出时不再存在。
函数退出时,内核中的内存myThread
还能使用吗?
我不需要存储的线程ID,myThread
所以我不想分配内存并再次释放它。
当我以下列方式使用 pthread_create 时可能会导致错误吗?
void myFunction(){
thread_t myThread;
pthread_create(&myThread,0,myRoutine,0);
}
我不确定局部变量的使用是否myThread
会导致错误,因为它在myFunction()
退出时不再存在。
函数退出时,内核中的内存myThread
还能使用吗?
我不需要存储的线程ID,myThread
所以我不想分配内存并再次释放它。
您不应该让线程“刚刚完成”,因为这肯定会导致问题。如果您希望线程刚刚结束,您应该至少使用pthread_detach
,此时线程是完全“独立的”,并且应该可以保留它。
当我
pthread_create
以以下方式使用时会导致错误吗?
是的:您现在无法在线程完成时加入线程。这是资源泄漏,类似于丢失指向已分配内存的唯一指针。
如果你实在不想有控制地关闭它,那么你可以打电话pthread_detach
让它负责整理自己的资源;那么你就可以放心地放弃线程句柄了。
函数退出时,内核中的内存
myThread
还能使用吗?
不pthread_t
,只是用于访问线程资源的句柄。它不管理这些资源,除非您需要访问它们,否则它不需要存在。
您还可以在创建时将 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);