进程与线程的问题
请大家帮帮忙,在《UNIX环境高级编程》一书中的第一章1.6小节中有这样一句话:All the threads within a process share the same address space, file descriptors, stacks, and
process-related attributes.。
为什么线程之间还共享stacks????请高手指点。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
后面这句话不是解释的很明白么 .... 为了避免不一致性
All the threads within a process share the same address space, file descriptors, stacks, and
process-related attributes. Because they can access the same memory, the threads need to
synchronize access to shared data among themselves to avoid inconsistencies.
后面那句是说:因为线程能够访问相同的内存(这里应该是指全局变量,静态变量,常量),所以线程在访问共享的数据时需要采用同步机制,以此来避免数据不一致。好像不是解释第一句话的。
stacks是栈,按道理来说每个线程都有自己的局部变量,所以对每个线程来说,栈都是各自的(临时开辟的),所以不能共享。
不知仁兄有何高见,请指点。。。。。
回复 2# chiyiangel
All the threads within a process share the same address space, file descriptors, stacks, and
process-related attributes. Because they can access the same memory, the threads need to
synchronize access to shared data among themselves to avoid inconsistencies.
后面那句是说:因为线程能够访问相同的内存(这里应该是指全局变量,静态变量,常量),所以线程在访问共享的数据时需要采用同步机制,以此来避免数据不一致。好像不是解释第一句话的。
stacks是栈,按道理来说每个线程都有自己的局部变量,所以对每个线程来说,栈都是各自的(临时开辟的),所以不能共享。
不知仁兄有何高见,请指点。。。。。
回复 4# bin_linux96
以我拙见, 线程共享的一些数据在进程的栈中, 每个线程也有自己的栈空间来维护自己的一些信息。所以不矛盾吧
如果1个进程有4M的栈,这个进程下的所有线程共享这4M的栈,而其他进程会有单独的4M的栈。
回复 5# crazyhadoop
嗯,好像有点道理,但是如果是讨论线程的话,那么就不存在进程栈这个说话了。栈是临时开辟的,用于保存局部变量以及一些临时变量。
回复 7# bin_linux96
这个肯定有啊~线程也要依附在进程上啊~有些进程自己的数据肯定要存放在 自己的栈里呐。这也就是为什么线程不能随意return的原因。
比如一个家族有几口水缸,几个兄弟,不分家,每家兄弟都可以用家族的所有水缸;几户人家,水缸是各自的,不能用别人的。
一个进程,就那么3G用户空间,堆啊栈啊就在那摆着,线程就在进程这3G里面,就像几个兄弟,大部分东西都随便用,你的我看得见我的你也看得见,只要知道在哪就能用。
进程和线程的概念 ...
我的理解是 进程开辟的 线程能用... 但是不确定会 用哪一块 可能线程A用到了地址1 线程2 也用到了地址1 这就需要共享了... 为了避免同时使用一块地址的不一致性