[英]C++'s std::vector and thread safety
以下代碼線程安全嗎:
螺紋A
std::vector<std::string> myCopy;
with_locked_mutex(m) {
myCopy = sharedCopy;
}
myCopy.clear() etc. // -- a
螺紋B
while(1) {
// do things ...
with_locked_mutex(m) {
sharedCopy.push_back(a); // -- b
}
}
換句話說,std :: vector的COW語義(我也認為std :: string的COW語義)是否會在a和b之間創建競爭條件? 如果是這樣,我有什么辦法可以防止呢?
假設with_locked_mutex(m) { something }
以某種方式確保在代碼塊之前獲取互斥鎖,然后在釋放之后釋放互斥鎖,這兩個操作將互斥地運行,因此不會有問題。
而且std::vector
無論如何都不能使用寫時復制。
AFAIK, std::vector
不具有COW語義。 賦值運算符和復制構造函數始終復制每個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.