Re: [問題] thread 和 string
※ 引述《elfkiller (沒有暱稱)》之銘言:
: 標題: [問題] thread 和 string
: 時間: Wed Jun 3 19:25:55 2009
:
: void thread_function(){
:
: string xxx;
:
: ...
: }
:
: 如果像上面一樣在thread裡面建構一個string
: 會因為 string 是動態物件
: 使得多個 thread 共用到同一個 string 造成 race condition 嗎?
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 118.161.119.103
: 推 legnaleurc:不會,除非你的 string 實作品有用到 COW 06/03 19:28
: 推 sitos:local variable 一般而言不會共用 06/03 19:29
: → legnaleurc:不過應該沒什麼環境會用 COW 去實作 string 06/03 19:29
: → elfkiller:可是 string 不是會動態要求記憶體嗎會不會在 heap 中呢 06/03 19:55
: 推 Ebergies:string 動態要求記憶體為啥會 race condition? 06/03 20:26
: → elfkiller:因為 thread 不是會共用 heap 嗎? 06/03 20:46
: 推 Ebergies:那你應該是問 "new" 是不是 thread safe 06/03 20:59
: → Ebergies:基本上, "大部分" 都是 06/03 21:00
: → firose:除非用同一個指標指涉它, 就像 singleton 那樣, 才有 data 06/03 21:06
: → firose:race. stack 變數不會共享, 沒問題, 執行緒都有自己 stack 06/03 21:07
: 推 sitos:就算共用 heap ,兩次 new 出來也不會指到同一個地方 :) 06/04 03:00
我所知大部份 STL 的 string implementation 都是用 COW的.
所以, 問題不在於 "new" 是不是 thread safe etc.
當然, COW 如果有做適當的 synchronization 也是 thread safe 的.
對於原 po 的問題, 萬一你用的是 VC++ 6 的話 (後來的 version 我沒有
留意了), 的確會有 race condition, 當年工作時因為踫到問題, trace 過
string 部份的 code 發現的. 萬一你真的剛巧就是用 VC++ 6, 強烈建議轉
用別的 STL implementation (STL Port, Apache Std Lib 等)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
推
06/04 11:15, , 1F
06/04 11:15, 1F
→
06/04 12:20, , 2F
06/04 12:20, 2F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章