[问题] C++ creat pthread 内存空间问题

楼主: gigigigi (gigigigi)   2018-03-24 09:04:03
http://codepad.org/Ix2KLRMD
我了解是 thread 在 stack 宣告的变量都是每个 thread 各自独立
只有是 global 变量位在.data 跟 heap 是 process 里面所有thread 共享
那我疑问是在上面网址程式里面 main() 函数宣告一个 B class 的 instance b 变量
那这块instace 应该是属于 stack 不是 heap(因为我不是new 出来的)
那我之后呼叫 b.start_thread();
产生两条thread 在 member function add / print 还有 main 函数都用 while(1)
不断印出data 跟 pid & tid , 看起来 class 的 data变量 是共享的~
那我不懂是 B b; 宣告出来的 b 应该属于 stack ,
在同Process 底下的不同 thread 怎么能够存取在 stack instace ?
谢谢
作者: a1u1usul3 (Q-Max)   2018-03-24 14:20:00
https://upsilon.cc/~zack/teaching/1314/progsyst/cours-08-pthreads.pdfin short : goo.gl/PcpgZMpage 13 看起来main stack会共用,local variable放在每个thread新创的thread stack里
楼主: gigigigi (gigigigi)   2018-03-24 20:56:00
后来我想一下应该是 pthread_create最后参数带入this因为都是同个process是在同个 virtual address 下在start_thread 函数把B b 的instance this 指标带入所以这样作法其余子thread 只要取得这个instace 都可以存取这个 instace 里面的data member
作者: a1u1usul3 (Q-Max)   2018-03-25 03:56:00
yes,那样说也行,但是main thread stack的变量可能会被pop掉,这不是个好写法,到时候修改的值到底是谁的什么会变得都不知道了

Links booklink

Contact Us: admin [ a t ] ucptt.com