是应该在堆栈还是堆上分配pthread函数参数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是应该在堆栈还是堆上分配pthread函数参数?相关的知识,希望对你有一定的参考价值。

我使用pthreads为生产者 - 消费者/有界缓冲区问题编写了一个“解决方案”,我使用72位结构来存储所有线程共享的数据和同步类型。这个结构在堆上分配,但是在堆栈上分配它并在pthread_create中传递它的地址也可以。在没有使用pthread_detach的情况下,有没有理由更喜欢堆分配而不是pthread参数的堆分配(反之亦然)?

编辑: 结构在main()中声明,并且所有线程都保证在main()完成之前完成。超出范围不是问题。

答案

这取决于堆栈分配的变量相对于正在运行的线程的生命周期。

如果保证线程在堆栈变量超出范围之前退出(即在所有等待的线程上调用pthread_join),那么使用局部变量就可以了。如果在线程仍在运行时堆栈变量超出范围,则必须动态分配它们。

以上是关于是应该在堆栈还是堆上分配pthread函数参数?的主要内容,如果未能解决你的问题,请参考以下文章

在递归函数中在堆上分配与在堆栈上分配

关于new的堆栈问题

如何确定 Rust 中的 new() 何时在堆栈或堆上分配

C++ 类可以确定它是在堆栈上还是在堆上?

为啥函数执行后没有释放堆上的元素?

结构总是堆栈分配还是有时堆分配?