刚刚开始使用 C++11 线程库进行多线程(以及一般的多线程),并编写了一小段代码。
#include <iostream>
#include <thread>
int x = 5; //variable to be effected by race
//This function will be called from a thread
void call_from_thread1() {
for (int i = 0; i < 5; i++) {
x++;
std::cout << "In Thread 1 :" << x << std::endl;
}
}
int main() {
//Launch a thread
std::thread t1(call_from_thread1);
for (int j = 0; j < 5; j++) {
x--;
std::cout << "In Thread 0 :" << x << std::endl;
}
//Join the thread with the main thread
t1.join();
std::cout << x << std::endl;
return 0;
}
由于两个线程之间的竞争,我每次(或几乎每次)运行这个程序时都期望得到不同的结果。但是,输出始终是: 0
,即两个线程运行就像它们按顺序运行一样。为什么我得到相同的结果,有什么方法可以模拟或强制两个线程之间的竞争?