std :: string copy-on-write实现线程安全

时间:2011-02-15 12:28:59

标签: c++ string thread-safety copy-on-write

  

可能重复:
  C++: std::string in a multi-threaded program
  Is std::string thead-safe with gcc 4.3?

大家好,

假设我们将对象的引用传递给线程过程,稍后我们修改该对象。这里我们有数据竞争,所以为了避免最好按值传递对象。现在它看起来很安全,但它真的安全吗?如果对象的类型为std::string,该怎么办?有些编译器使用写时复制语义实现std::string,因此不会复制实际数据,而是指它们都引用相同的数据。在其中一个对象上调用修改器函数时,将完成实际复制。现有的C ++标准允许这样的实现,但是现有的标准没有说多线程,所以允许这种实现不是线程安全的。是吗?

您对这种解决方案有什么看法?

std :: string x =“blablabla; std :: strinc copy_of_x = x.c_str();

感谢。

1 个答案:

答案 0 :(得分:0)

这是依赖于实现的。查看标准库的文档:单线程和多线程应用程序可能有单独的实现。另外,我不能指出任何合理的现代C ++平台,它不支持多线程。