好的,所以我被告知此代码不是线程安全的。
#include <iostream>
#include <thread>
static int sum[5];
static int get_sum()
{
int x=0;
for (int j=0;j<5;++j)
x += sum[j];
return x;
}
static void f1(int x){
sum[x] = 1;
std::cout << "f" <<x << ": " << sum[x] << " : " << get_sum() << std::endl;
}
int main() {
for (int j=0;j<5;++j)
sum[j] = 0;
std::thread t0(f1, 0);
std::thread t1(f1, 1);
std::thread t2(f1, 2);
std::thread t3(f1, 3);
std::thread t4(f1, 4);
while (get_sum() != 5) ;
t0.join();
t1.join();
t2.join();
t3.join();
t4.join();
std::cout << "final: " << get_sum() << std::endl;
}
有人可以向我解释为什么该程序可能无法完成吗?我知道 get_sum 的运行值将是不确定的,并且 cout 的输出将随机交错,但这与程序完成无关。