Re: [問題] thread 和 string

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/06/04 10:45), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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
2005 以後 std::string 都是 full copied
06/04 11:15, 1F

06/04 12:20, , 2F
感謝提供資料 ^^ 實在太久沒踫 C++ 了 orz
06/04 12:20, 2F
文章代碼(AID): #1A9pL9ui (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #1A9pL9ui (C_and_CPP)