【发布时间】:2012-03-24 02:03:09
【问题描述】:
我有几个关于 POSIX 线程堆栈大小及其安全问题的问题:
A) 我们可以有不同的堆栈大小(对于每个线程集,使用:pthread_attr_getstacksize)?
B) 当一个线程死亡(分离/退出)时,操作系统会回收它的内存页面吗?
C) 如果它们在虚拟内存映射上碰巧彼此相邻,一个线程能否继续写入另一个线程堆栈段?
【问题讨论】:
标签: multithreading stack pthreads
我有几个关于 POSIX 线程堆栈大小及其安全问题的问题:
A) 我们可以有不同的堆栈大小(对于每个线程集,使用:pthread_attr_getstacksize)?
B) 当一个线程死亡(分离/退出)时,操作系统会回收它的内存页面吗?
C) 如果它们在虚拟内存映射上碰巧彼此相邻,一个线程能否继续写入另一个线程堆栈段?
【问题讨论】:
标签: multithreading stack pthreads
A) 是的,当然,这就是 pthread_attr_setstacksize 的目的。
B) 是的,调用pthread_detach 或pthread_join 会导致线程资源在终止时被回收。
C) 理论上是的,但由于在大多数系统上堆栈向后增长(从高地址到低地址),您必须进行某种缓冲区溢出才能摆脱当前的堆栈空间。
【讨论】: