pthread_create以局部变量作为参数

pthread_create with local variable as parameter

本文关键字:参数 局部变量 create pthread      更新时间:2023-10-16

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

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

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

当函数退出时,myThread的内存是否仍然可以在内核中使用?

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

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

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);

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

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

如果你真的不想以受控的方式关闭它,那么你可以调用pthread_detach让它负责整理自己的资源;然后你可以安全地放弃线程句柄。

当函数退出时,myThread的内存是否仍然可以在内核中使用?

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