【发布时间】:2019-09-16 03:57:43
【问题描述】:
我已经使用 pthreads 为生产者-消费者/有界缓冲区问题编写了一个“解决方案”,并且我使用 72 位结构来存储所有线程共享的数据和同步类型。这个结构是在堆上分配的,但在堆栈上分配它并在pthread_create 中传递它的地址也可以。在不使用pthread_detach的情况下,是否有任何理由更喜欢堆栈分配而不是pthread参数的堆分配(反之亦然)?
编辑:
该结构在main() 中声明,并且所有线程都保证在main() 完成之前完成。超出范围不是问题。
【问题讨论】:
-
我对此表示怀疑,只是在从堆栈传递参数时要小心数据范围。如果堆栈中的数据超出范围(例如,当函数退出时),并且您的线程仍在处理它.. UB
-
鉴于您的编辑,听起来您的问题更多地与何时使用自动与动态存储分配有关。鉴于您的数据结构很小,我会使用自动的。这是关于 SO 处理该主题的几个问题之一:stackoverflow.com/questions/1963780/…
-
C11 标准草案 n1570:6.2.4 对象的存储持续时间 5 其标识符声明为没有链接且没有存储类说明符 static 的对象具有自动存储持续时间,某些化合物也是如此文字。尝试从与对象关联的线程以外的线程间接访问具有自动存储持续时间的对象的结果是实现定义的。
-
@EOF 这正是我正在寻找的答案,谢谢。
标签: c pthreads heap-memory stack-memory