pthread_create以局部变量作为参数
pthread_create with local variable as parameter
当我通过以下方式使用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
只是用于访问线程资源的句柄。它不管理这些资源,除非你需要访问它们,否则它不需要存在。
相关文章:
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 如何在 C++ 的 lambda 函数中传递同名的局部变量和参数(使用此关键字)?
- 在返回参数列表中C++局部变量(如CodeFights所示)
- 在 pthread_create() 中使用局部变量作为参数有效吗?
- 指针或局部变量,用于函数的输出参数
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- 通过引用参数将局部变量分配给
- 如何将带有局部变量的一些参数的函数包装器放入具有MSVC2015的容器中
- C++ 对局部变量的引用与对参数的引用
- 局部变量作为非类型参数,具有模板规范
- 局部变量的内存地址根据 lambda 参数的预感而变化
- pthread_create以局部变量作为参数
- 为什么我不能将局部变量的引用作为非类型模板参数?
- 将引用参数分配给局部变量
- 作为非typename参数的局部变量
- 如何迭代可变模板参数来创建可变数量的局部变量
- 直接使用函数参数vs创建局部变量
- 在程序中使用非类型模板参数而未给局部变量赋值时,会导致意外结果
- 局部变量作为非类型模板参数
- 访问与局部变量(或参数)同名的成员字段