2

当我以下列方式使用 pthread_create 时可能会导致错误吗?

void myFunction(){
  thread_t myThread;
  pthread_create(&myThread,0,myRoutine,0);
}

我不确定局部变量的使用是否myThread会导致错误,因为它在myFunction()退出时不再存在。

函数退出时,内核中的内存myThread还能使用吗?

我不需要存储的线程ID,myThread所以我不想分配内存并再次释放它。

4

3 回答 3

3

您不应该让线程“刚刚完成”,因为这肯定会导致问题。如果您希望线程刚刚结束,您应该至少使用pthread_detach,此时线程是完全“独立的”,并且应该可以保留它。

于 2013-09-04T13:44:30.983 回答
2

当我pthread_create以以下方式使用时会导致错误吗?

是的:您现在无法在线程完成时加入线程。这是资源泄漏,类似于丢失指向已分配内存的唯一指针。

如果你实在不想有控制地关闭它,那么你可以打电话pthread_detach让它负责整理自己的资源;那么你就可以放心地放弃线程句柄了。

函数退出时,内核中的内存myThread还能使用吗?

pthread_t,只是用于访问线程资源的句柄。它不管理这些资源,除非您需要访问它们,否则它不需要存在。

于 2013-09-04T13:47:51.937 回答
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);
于 2013-09-04T17:59:31.800 回答