[問題] C++ creat pthread 記憶體空間問題

看板LinuxDev作者 (gigigigi)時間7年前 (2018/03/24 09:04), 7年前編輯推噓2(2011)
留言13則, 2人參與, 7年前最新討論串1/1
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://www.ptt.cc/bbs/LinuxDev/M.1521853445.A.5DA.html

03/24 14:20, 7年前 , 1F

03/24 14:20, 7年前 , 2F
rs-08-pthreads.pdf
03/24 14:20, 2F

03/24 14:21, 7年前 , 3F
in short : goo.gl/PcpgZM
03/24 14:21, 3F

03/24 14:22, 7年前 , 4F
page 13 看起來main stack會共用,local variable放在
03/24 14:22, 4F

03/24 14:23, 7年前 , 5F
每個thread新創的thread stack裡
03/24 14:23, 5F

03/24 20:56, 7年前 , 6F
後來我想一下應該是 pthread_create最後參數帶入this
03/24 20:56, 6F

03/24 20:56, 7年前 , 7F
因為都是同個process是在同個 virtual address 下
03/24 20:56, 7F

03/24 20:57, 7年前 , 8F
在start_thread 函數把B b 的instance this 指標帶入
03/24 20:57, 8F

03/24 20:58, 7年前 , 9F
所以這樣作法其餘子thread 只要取得這個instace 都可以
03/24 20:58, 9F

03/24 20:59, 7年前 , 10F
存取這個 instace 裡面的data member
03/24 20:59, 10F
※ 編輯: gigigigi (175.181.152.144), 03/24/2018 20:59:32

03/25 03:56, 7年前 , 11F
yes,那樣說也行,但是main thread stack的變數可能會
03/25 03:56, 11F

03/25 03:56, 7年前 , 12F
被pop掉,這不是個好寫法,到時候修改的值到底是誰的什
03/25 03:56, 12F

03/25 03:56, 7年前 , 13F
麼會變得都不知道了
03/25 03:56, 13F
文章代碼(AID): #1QjQG5NQ (LinuxDev)
文章代碼(AID): #1QjQG5NQ (LinuxDev)