我想应用尽可能简单的互斥锁。
#include <iostream>
#include <thread>
#include <vector>
#include <functional>
#include <algorithm>
#include <mutex>
using namespace std;
int sum;
static mutex m;
void addValue(int value)
{
m.lock();
sum += value;
m.unlock();
}
int main()
{
int counter1 = 0;
int counter2 = 0;
for (int i = 0; i < 100; i++)
{
thread t1(addValue, 100);
thread t2(addValue, 200);
if (sum == 300)
{
counter1++;
}
else
{
counter2++;
}
sum = 0;
t1.join();
t2.join();
}
cout << counter1 << endl;
cout << counter2 << endl;
}
不幸的是,上面提到的代码没有按预期工作。我希望:
a) sum 总是等于 300
b) counter1 总是 100
c) counter2 总是 0
怎么了?
编辑:
当我在条件中调试sum
变量时else
,我看到如下值:200、400、100 甚至 0(我假设加法甚至没有发生)。