作者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/m.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