我已经使用pthreads解决了生产者/消费者/边界缓冲区问题的“解决方案”,并且使用72位结构来存储所有线程共享的数据和同步类型。此结构是在堆上分配的,但也可以在堆栈上分配它并在pthread_create
中传递其地址。在没有使用pthread_detach
的情况下,有什么理由比pthread参数的堆分配更喜欢堆栈分配吗?反之亦然?
编辑:
该结构在main()
中声明,并且保证所有线程在main()
完成之前完成。超出范围不是问题。
答案 0 :(得分:1)
这取决于与运行线程有关的堆栈分配变量的生存期。
如果保证在堆栈变量超出范围之前退出线程(即,在所有等待的线程上调用pthread_join
),则可以使用局部变量。如果在线程仍在运行时堆栈变量超出范围,则必须动态分配它们。