簡體   English   中英

C ++的std :: vector和線程安全

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM