可能的重复:
C++:多线程程序中的
std::string 使用 gcc 4.3 时 std::string 是安全的吗?
大家好,
假设我们将对象的引用传递给线程过程,然后我们修改该对象。这里我们有数据竞争,所以为了避免这种情况最好按值传递对象。现在看起来很安全,但真的安全吗?如果对象的类型是std::string
. 有些编译器实现std::string
了写时复制语义,因此不会复制实际数据,而是它们都引用相同的数据。当对其中一个对象调用修改器函数时,就会完成真正的复制。现有的 C++ 标准允许这样的实现,但是现有的标准没有提到多线程,所以这个实现被允许不是线程安全的。那正确吗?
您对这种解决方案有何看法?
std::string x = "blablabla; std::strinc copy_of_x = x.c_str();
谢谢。