关于C++11多线程计算的问题,请各位大神帮忙解答一下,小女子感激不尽~~
//在以下简单的程序中,运行结果应该是20000000,然而在GCC编译运行后输出的数介于一千万到两千万之间,而且每次运行的结果都不同,这是为什么呢(┬_┬)//请帮忙更...
// 在以下简单的程序中,运行结果应该是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;
} 展开
// 请帮忙更正一下,非常感谢!
#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个回答
展开全部
线程对象在声明之后就会立即执行。
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询