常に読み書き可能(lockfree)な単一の値を格納するためのC++コンテナ(シングルライター、多くのリーダー)がありますか?古いバージョンを読むのは大丈夫です。単一オブジェクトのスレッドセーフコンテナ(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
はアトミックではありませんが、それはブール値であり、唯一の1つの書き込みスレッドが起こるので、一度に両方の可能な値が許容されます。
コンパイラがコードを最適化するときに何が起こるかを検討する必要があります。他のスレッドで更新されている可能性がある場合、値を再読み込みする必要があることをコンパイラが認識しないため、コードを省略することができます。コンパイラが不要な読み込み(または書き込み)を削除するよう最適化すると、更新された値が決して表示されないことがあります。 –