是否有一個c + +容器(單個寫入器,許多讀者)用於存儲總是讀/寫(lockfree)的單個值?閱讀過時的版本是好的。在C++中的單個對象的線程安全的容器
我想到了這樣的事情:
template <class T>
class Container {
bool active = 0;
T object[2];
public:
void writeData(T t)
{
object[!active] = t;
active = !active;
}
T readData()
{
return object[active];
}
};
一個問題,我認爲:
Read thread reads active = 0
Write thread happens (active = 1)
another Write thread starts and writes to 0
Read thread reads the data which is currently written to
原因活躍的是不是原子,但因爲它是一個布爾值,只有一個寫線程發生一次,兩種可能的值都是可以接受的。
您需要考慮編譯器優化代碼時會發生什麼。代碼可能會被省略,因爲如果編譯器可能已經在另一個線程中更新了,則編譯器將不會意識到需要重新讀取這些值。如果編譯器優化以刪除不必要的讀取(或寫入),您可能永遠不會看到更新的值。 –