[問題] thread 和 string

看板C_and_CPP作者 (沒有暱稱)時間15年前 (2009/06/03 19:25), 編輯推噓5(506)
留言11則, 5人參與, 最新討論串1/4 (看更多)
void thread_function(){ string xxx; ... } 如果像上面一樣在thread裡面建構一個string 會因為 string 是動態物件 使得多個 thread 共用到同一個 string 造成 race condition 嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.119.103

06/03 19:28, , 1F
不會,除非你的 string 實作品有用到 COW
06/03 19:28, 1F

06/03 19:29, , 2F
local variable 一般而言不會共用
06/03 19:29, 2F

06/03 19:29, , 3F
不過應該沒什麼環境會用 COW 去實作 string
06/03 19:29, 3F

06/03 19:55, , 4F
可是 string 不是會動態要求記憶體嗎會不會在 heap 中呢
06/03 19:55, 4F

06/03 20:26, , 5F
string 動態要求記憶體為啥會 race condition?
06/03 20:26, 5F

06/03 20:46, , 6F
因為 thread 不是會共用 heap 嗎?
06/03 20:46, 6F

06/03 20:59, , 7F
那你應該是問 "new" 是不是 thread safe
06/03 20:59, 7F

06/03 21:00, , 8F
基本上, "大部分" 都是
06/03 21:00, 8F

06/03 21:06, , 9F
除非用同一個指標指涉它, 就像 singleton 那樣, 才有 data
06/03 21:06, 9F

06/03 21:07, , 10F
race. stack 變數不會共享, 沒問題, 執行緒都有自己 stack
06/03 21:07, 10F

06/04 03:00, , 11F
就算共用 heap ,兩次 new 出來也不會指到同一個地方 :)
06/04 03:00, 11F
文章代碼(AID): #1A9bt4o2 (C_and_CPP)
文章代碼(AID): #1A9bt4o2 (C_and_CPP)