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

时间:2019-04-26 15:42:46

标签: c pthreads heap-memory stack-memory

我已经使用pthreads解决了生产者/消费者/边界缓冲区问题的“解决方案”,并且使用72位结构来存储所有线程共享的数据和同步类型。此结构是在堆上分配的,但也可以在堆栈上分配它并在pthread_create中传递其地址。在没有使用pthread_detach的情况下,有什么理由比pthread参数的堆分配更喜欢堆栈分配吗?反之亦然?

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

1 个答案:

答案 0 :(得分:1)

这取决于与运行线程有关的堆栈分配变量的生存期。

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