服务器多线程学习(二)
标签:简单 temp 多线程 size work 为什么 一个 调用 join
这里的代码是为了引入一个问题:线程安全
#include
#include//线程头文件
#include//简单说std::future提供了一种访问异步操作结果的机制
#include//数学操作头文件
#include
#include//获取本机器参考线程数的头文件
#include//C语言中的stdlib.h在C++被重命名为cstdlib
#include////C语言中的time.h在C++被重命名为ctime
using namespace std;
class Counter
{
public:
Counter():m_count {0}{}
void addCount() { m_count++; }
int count() const { return m_count; }
private:
int m_count;
};
int work(int a)
{
return a + a;
}
template
void realWork(Counter &c, double &totalValue, Iter itBegin,Iter itEnd)
{
for (; itBegin != itEnd; itBegin++)
{
totalValue += work(*itBegin);
c.addCount();
}
}
//并发量
int main()
{
unsigned int n = thread::hardware_concurrency();
cout vec;
double totalValue = 0;
for (int i = 0; i
运行结果如下:
本机器参考线程数:4
total times10000000
线程调用的counter2:9964868
为什么会少呢?是因为线程操作相同的变量++的时候i,++的过程中,无法操作,也就会漏掉本次操作,造成所谓“线程安全问题”
服务器多线程学习(二)
标签:简单 temp 多线程 size work 为什么 一个 调用 join
原文地址:https://www.cnblogs.com/zhangthree/p/10989158.html
评论