当前位置: 首页 > wzjs >正文

河南郑州百度网站建设百度营销登录平台

河南郑州百度网站建设,百度营销登录平台,聊城做网站的公司新闻,品牌购买网站count; count--; 我们知道,/--操作并不是原子性的,其实对应三条汇编指令来完成的。 读取:从内存中把变量的值读取到寄存器修改:在寄存器里将变量的值1/-1写入:把修改后的值写入到内存 在单线程环境下,这…
count++;
count--;

我们知道,++/--操作并不是原子性的,其实对应三条汇编指令来完成的。

  • 读取:从内存中把变量的值读取到寄存器
  • 修改:在寄存器里将变量的值+1/-1
  • 写入:把修改后的值写入到内存

在单线程环境下,这三个步骤是顺序执行的不会有问题。但是在多线程环境下,多个线程可能对同一个变量同时进行++/--操作,从而导致数据竞争的问题。

可以看下面的过程演示。

一:

二:

三:

C++11是通过加锁来保证++/--操作的原子性的。

std::lock_guard<std::mutext>(mtx);
count++;
std::unlock_guard<std::mutex>(mtx);

互斥锁是比较重的,临界区代码稍稍复杂的情况下建议使用。从系统理论上来讲,使用CAS无锁操作来保证++/--操作的原子性就足够了,其实并不是不加锁,只是不在软件层面上加锁解锁,而是在硬件层面上实现的。

#include<iostream>
#include<thread>
#include<list>
#include<atomic>
using namespace std;volatile std::atomic_bool isReady = false;
volatile std::atomic_int myCount = 0;void task()
{while (!isReady){std::this_thread::yield(); // 线程让出当前的CPU时间片,等待下一次调度}for (int i = 0; i < 100; i++){myCount++;}
}
int main()
{list<std::thread> tlist;for (int i = 0; i < 10; i++){tlist.push_back(std::thread(task));}std::this_thread::sleep_for(std::chrono::seconds(3));isReady = true;for (auto& t : tlist){t.join();}std::cout << "myCount: " << myCount << std::endl;return 0;
}

http://www.dtcms.com/wzjs/137099.html

相关文章:

  • 江西做网站找谁广州百度网站推广
  • 网站建设中怎么编辑图片网址域名注册
  • 武昌做网站公司推荐北京seo顾问外包
  • 蚌埠网站建设哪家好网络营销推广的特点
  • ssm+html实现网站开发最近三天的新闻大事简短
  • 网站站内内链建设新闻投稿平台
  • 闵行区 网站制作搜索引擎关键词seo优化公司
  • axure做网站教学视频软文内容
  • wap电影网站建设百度网络科技有限公司
  • 怎样注册自己的货运网站流量精灵app
  • 安徽炒股配资网站开发网络营销推广8种方法
  • 做暧暧视频免费视频日韩网站湖南网站营销seo多少费用
  • 中国十大公关公司百度手机seo软件
  • 衡阳衡南网站建设海外营销推广
  • 做网站不会写代码软广告经典案例
  • 电子商务网站的全面建设手机360优化大师官网
  • 网站界面设计中的布局设计成都推广团队
  • 温州设计集团有限公司官网seo北京优化
  • 网站建设拿什么框架百度一下就知道
  • 做网站的多钱爱站小工具
  • 宁波制作网站知名新手做销售怎么开发客户
  • 网站开发遇到的问题及解决方法百度推广登录入口官网网址
  • 中企动力会员控制平台郑州seo管理
  • 怎样做网站呢 优帮云百度提交工具
  • 常州网红景点有名的seo外包公司
  • 招聘美容师在哪个网站做招聘最有效seo培训优化课程
  • 网页设计常见的布局形式seo技巧课程
  • 基于互联网怎样做网站推广深圳关键词推广优化
  • 社交网站开发公司公司市场营销策划方案
  • 商城网站流程seo软件推荐