ich in vielen Threads eine Funktion foo
Lauf haben (std::thread t([&]() { foo(a); }
):std :: atomics und std :: lock_guard oder nur std :: lock_guard
void foo(int a)
{
if (x && y != a)
{
++x;
y = a;
vec.push_back(std::chrono::high_resolution_clock::now());
}
}
I int x
, int y
und std::vector<> vec
gegen Race-Bedingung schützen müssen . Was ist die beste Lösung?
Um x
und y
als std::atomic
zu definieren und std::lock_guard(mutex)
verwenden, bevor zu vec
schieben.
Oder std::lock_guard
für den ganzen Körper von if
Aussage?
Oder vielleicht eine bessere Lösung?
Persönlich würde ich das ganze Ding sperren, da die ganze Operation scheint, wie es nicht verschachtelt werden sollte. – NathanOliver
Nachdem du getestet hast, ob 'y! = 5 'dir was ausmacht, wenn ein anderer Thread' y' ändert, bevor du zur Zeile 'y = 5' kommst? – Galik