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

苏州建网站哪家外国人做的关于中国的视频网站吗

苏州建网站哪家,外国人做的关于中国的视频网站吗,尺寸在线做图网站,第一ppt网站官网前文我们通过原子操作实战实现了无锁队列#xff0c;今天完善一下无锁的原子操作剩余的知识#xff0c;包括Relaese和Acquire内存序在什么情况下是存在危险的#xff0c;以及我们可以利用栅栏机制实现同步等等。 线程可见顺序 我们提到过除了memory_order_seq_cst顺序#…前文我们通过原子操作实战实现了无锁队列今天完善一下无锁的原子操作剩余的知识包括Relaese和Acquire内存序在什么情况下是存在危险的以及我们可以利用栅栏机制实现同步等等。 线程可见顺序 我们提到过除了memory_order_seq_cst顺序其他的顺序都不能保证原子变量修改的值在其他多线程中看到的顺序是一致的。 但是可以通过同步机制保证一个线程对原子变量的修改对另一个原子变量可见。通过“Syncronizes With” 的方式达到先行的效果。 但是我们说的先行是指 “A Syncronizes With B ” 如果A 的结果被B读取则A 先行于B。 有时候我们线程1对A的store操作采用release内存序而线程2对B的load采用acquire内存序并不能保证A 一定比 B先执行。因为两个线程并行执行无法确定先后顺序我们指的先行不过是说如果B读取了A操作的结果则称A先行于B。 我们看下面的一段案例 #include iostream #include atomic #include thread #include cassert std::atomicbool x, y; std::atomicint z; void write_x() {x.store(true, std::memory_order_release); //1 } void write_y() {y.store(true, std::memory_order_release); //2 } void read_x_then_y() {while (!x.load(std::memory_order_acquire));if (y.load(std::memory_order_acquire)) //3z; } void read_y_then_x() {while (!y.load(std::memory_order_acquire));if (x.load(std::memory_order_acquire)) //4z; } // 我们写一个函数测试函数TestAR中初始化x和y为false 启动4个线程a,b,c,d分别执行write_x, write_y, read_x_then_y, read_y_then_x. void TestAR() {x false;y false;z 0;std::thread a(write_x);std::thread b(write_y);std::thread c(read_x_then_y);std::thread d(read_y_then_x);a.join();b.join();c.join();d.join();assert(z.load() ! 0); //5std::cout z value is z.load() std::endl; }有的读者可能会觉5处的断言不会被触发他们认为c和d肯定会有一个线程对z执行操作。他们的思路是这样的。 1 如果c线程执行read_x_then_y没有对z执行加加操作那么说明c线程读取的x值为true, y值为false。 2 之后d线程读取时如果保证执行到4处说明y为true等d线程执行4处代码时x必然为true。 3 他们的理解是如果x先被store为truey后被store为truec线程看到y为false时x已经为true了那么d线程y为true时x也早就为true了所以z一定会执行加加操作。 上述理解是不正确的我们提到过即便是releas和acquire顺序也不能保证多个线程看到的一个变量的值是一致的更不能保证看到的多个变量的值是一致的。 变量x和y的载入操作3和4有可能都读取false值与宽松次序的情况一样因此有可能令断言触发错误。变量x和y分别由不同线程写出所以两个释放操作都不会影响到对方线程。 看下图即线程a执行了但是线程d没有看见 线程b执行了但是线程c没有看见 栅栏 有时候我们可以通过栅栏保证指令编排顺序。 看下面一段代码 #include atomic #include thread #include assert.h std::atomicbool x,y; std::atomicint z; void write_x_then_y() {x.store(true,std::memory_order_relaxed); // 1y.store(true,std::memory_order_relaxed); // 2 } void read_y_then_x() {while(!y.load(std::memory_order_relaxed)); // 3if(x.load(std::memory_order_relaxed)) // 4z; } int main() {xfalse;yfalse;z0;std::thread a(write_x_then_y);std::thread b(read_y_then_x);a.join();b.join();assert(z.load()!0); //5 }
http://www.zqtcl.cn/news/269134/

相关文章:

  • 网站 架构 设计公司网站建设费怎么做账
  • 合肥电脑网站建站萍乡手机网站建设
  • 优化seo网站西安wordpress 做购物网站
  • 广州建设档案馆网站稿定设计app免费版官方
  • 橙色企业网站源码建设工程投标文件在哪个网站有发布
  • 服务器可以做网站吗深圳高端网站建设创新
  • 企业平台网站建设方案大连网络广告
  • 如何给网站做宣传新手怎么建立自己网站
  • 酒店和网站对接如何做开发网站那个好
  • 北京建设信源咨询有限公司网站快对小程序入口
  • 湖北人工智能建站系统软件城乡建设官网
  • 广东模板建站平台设计网站
  • 晋江市住房和城乡建设网站二进制可以做网站是吗
  • 企业网站优化的方式网站开发 -(广告)
  • 素材解析网站搭建wordpress 提问
  • 域名解析网站安卓android系统下载
  • 相亲网站做推广的照片是谁广告优化师前景
  • 营销导向的网站建设的主要流程陕煤建设集团网站
  • 电商网站销售数据分析网页美工设计实训报告
  • 百度新网站收录wordpress免刷新插件
  • 如何做好网站外链c#+开发网站开发
  • 展示型网站报价网站目录创建下载链接
  • cloudflare做侵权网站建设网站需要什么知识
  • 软装设计公司名称怎样给网站做优化
  • 如何判断网站是用什么程序做的云南网站建设公司
  • 清远市建设局官方网站软件开发工程师发展前景
  • 韩国做hh网站图片转链接生成器在线
  • 有凡客模版怎么建设网站百度网盘在线观看资源
  • 网站关键字统计龙岩龙硿洞
  • 成都哪个网站建设比较好建设工程交易服务中心