// 在以下简单的程序中,运行结果应该是20000000,然而在GCC编译运行后输出的数介于一千万到两千万之间,而且每次运行的结果都不同,这是为什么呢(┬_┬)#include <iostream>#include <thread>int count=0;void test(){for(int i=0;i<10000000;i++)count++;}int main(){thread t1(test), t2(test);t1.join();t2.join();std::cout<<count<<std::endl;return 0;}
2 回答
哔哔one
TA贡献1854条经验 获得超8个赞
线程对象在声明之后就会立即执行。
thread t1(test), t2(test); //这里两个线程同时启动了,而你的线程函数没加锁 |
方法一:
//主函数应该这样写 int main() { thread t1(test); t1.join(); thread t2(test); t2.join(); std::cout<<count<<std::endl; return 0; } |
方法二:
//给线程函数加上锁 #include <iostream> #include <thread> #include <mutex> using namespace std; int count=0; mutex gMutex; void test() { lock_guard<mutex> lk (gMutex); for ( int i=0;i<10000000;i++) count++; } int main() { thread t1(test), t2(test); t1.join(); t2.join(); std::cout<<count<<std::endl; return 0; } |
- 2 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消