我有許多線程函數foo
運行(std::thread t([&]() { foo(a); }
):的std ::原子能和std :: lock_guard或只的std :: lock_guard
void foo(int a)
{
if (x && y != a)
{
++x;
y = a;
vec.push_back(std::chrono::high_resolution_clock::now());
}
}
我需要保護int x
,int y
和std::vector<> vec
對競爭條件。 什麼是最佳解決方案。
定義x
和y
爲std::atomic
,推動以vec
之前使用std::lock_guard(mutex)
。
或std::lock_guard
爲if
聲明的全身?
或者也許有更好的解決方案?
就個人而言,我會鎖定整個事情,因爲整個操作看起來應該不是交錯的。 – NathanOliver
在測試'y!= 5'之後,你是否介意另一個線程在你到達'y = 5'行之前是否改變'y'? – Galik