关于线程问题
目前在学习多线程编程,《Windows核心编程》书中说:线程的堆栈是从进程的地址空间中分配而来,那么线程能访问同一进程中其他线程的堆栈。
如果能访问同一进程其他线程的堆栈,那么在堆栈中创建的局部变量等不是也能共享了?
这样对吗?
[解决办法]
能访问。栈中变量当然能多线程访问了。但称“共享”就没什么意义了。
栈变量的生命期一般很短,多线程访问对这个生命期控制是比较痛苦的。
[解决办法]
完全可以啊。比如一个线程把自己栈上的一个变量的地址写到一个全局的指针变量中,另一个线程就可以看到了。
但尽量不要这样做。
[解决办法]
说尽量不要这样做的原因是因为这样几乎就没啥好处,而且控制起来也麻烦,尤其是生命周期问题。
[解决办法]
完全可以啊。比如一个线程把自己栈上的一个变量的地址写到一个全局的指针变量中,另一个线程就可以看到了。
但尽量不要这样做。
--------
使用这样的一些方法来达到目的是没有意义的。而且和编译器有关系。
可以认为线程不能互相访问对方的栈。
[解决办法]
不禁止,不保证。简单这么说,你可以,但是你不要去这样做。
多线程程序需要严格的设计。
[解决办法]
当然,“访问对方栈上的某个对象”跟“访问对方的栈”,这两种说法给人以讨论范围上的差别。我主要想说的是前者。
希望楼主也能明白:你想访问一两个对象可能是没有问题的,而且也不是什么新闻。但如果你想完全控制对方的栈,比如岂图用对方的栈做为另一个线程的函数执行栈,那当然是做不到的。