我想使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
是的。將「揮發性」添加到標誌可能會有幫助,但正確的鎖定會更好。 –