我想使std :: string append函数线程安全,因为我从不同的线程附加了特定的字符串。std :: string附加线程安全天真的解决方案?
我在C相当++初学者,所以我不知道这可能上升什么问题。
我想到解决的办法是不是使用somestring.append("appendthis");
使用下面的代码:
bool appendtsReady = true;
void appendts(std::string& originalString, char* app)
{
while (!appendtsReady) {}
appendtsReady = false;
originalString.append(app);
appendtsReady = true;
}
appendts(somestring, "appendthis");
我希望,如果字符串被附加了新的要求 appendts(somestring, "appendthis_from_different_thread");
将闻风循环直到前一个追加完成。
这个解决方案太幼稚了吗?
为对象提供锁定。例如。 http://en.cppreference.com/w/cpp/thread/mutex – Aleph
一致性编译器的优化器可以自由地断定while语句的条件永远不会是真的,并删除那些代码。 – IInspectable
是的。将“挥发性”添加到标志可能会有帮助,但正确的锁定会更好。 –