C++ std::字符串写时复制实现线程安全

C++ std::字符串写时复制实现线程安全,c++,string,thread-safety,copy-on-write,C++,String,Thread Safety,Copy On Write,可能的重复项: 大家好, 假设我们将对对象的引用传递给线程过程,然后修改该对象。这里我们有数据竞争,所以为了避免这种情况,最好按值传递对象。现在看起来很安全,但真的安全吗?如果对象的类型为std::string,该怎么办。有些编译器使用写时复制语义实现std::string,因此不会复制实际数据,而是它们都引用相同的数据。当对其中一个对象调用修改器函数时,将完成真正的复制。现有的C++标准允许这样的实现,但是现有的标准并没有说多线程的一个词,所以这个实现是不允许线程安全的。是这样吗 对于这种解

可能的重复项:

大家好,

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

对于这种解决方案,你会怎么说

std::string x=blabla; std::strinc copy_of_x=x.c_str


谢谢。

这取决于实现。检查标准库的文档:单线程和多线程应用程序可能有单独的实现。随便说,我不能指出任何一个合理的现代C++平台,它对多线程没有任何支持。p> 可能重复:是的,谢谢。。很抱歉,没有找到。另一个特定于GCC的字符串类,使用COW:谢谢。我在提到的主题中看到了所有答案。