【发布时间】:2016-10-11 14:40:29
【问题描述】:
我有一个函数 foo 在多个线程中运行 (std::thread t([&]() { foo(a); }):
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 语句?
或者可能有更好的解决方案?
【问题讨论】:
-
我个人会锁定整个事情,因为整个操作似乎不应该交错。
-
在您测试
y != 5之后,您是否介意另一个线程在您到达y = 5行之前更改y?
标签: c++ multithreading c++11 stl