作者gigigigi (gigigigi)
看板LinuxDev
标题[问题] C++ create pthread 记忆体空间问题
时间Sat Mar 24 09:04:03 2018
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 ?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 175.181.152.144
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1521853445.A.5DA.html
2F:→ a1u1usul3: rs-08-pthreads.pdf 03/24 14:20
3F:→ a1u1usul3: in short : goo.gl/PcpgZM 03/24 14:21
4F:→ a1u1usul3: page 13 看起来main stack会共用,local variable放在 03/24 14:22
5F:→ a1u1usul3: 每个thread新创的thread stack里 03/24 14:23
6F:→ gigigigi: 後来我想一下应该是 pthread_create最後参数带入this 03/24 20:56
7F:→ gigigigi: 因为都是同个process是在同个 virtual address 下 03/24 20:56
8F:→ gigigigi: 在start_thread 函数把B b 的instance this 指标带入 03/24 20:57
9F:→ gigigigi: 所以这样作法其余子thread 只要取得这个instace 都可以 03/24 20:58
10F:→ gigigigi: 存取这个 instace 里面的data member 03/24 20:59
※ 编辑: gigigigi (175.181.152.144), 03/24/2018 20:59:32
11F:推 a1u1usul3: yes,那样说也行,但是main thread stack的变数可能会 03/25 03:56
12F:→ a1u1usul3: 被pop掉,这不是个好写法,到时候修改的值到底是谁的什 03/25 03:56
13F:→ a1u1usul3: 麽会变得都不知道了 03/25 03:56