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

做外贸需要哪些网站关键词网站

做外贸需要哪些网站,关键词网站,龙岗网站,有哪些中文域名网站文章目录 一、通过内存序实现顺序模型1、Relaxed Ordering2、Sequencial Consistent Ordering3、Acquire Release Ordering 前言 前文介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。…

文章目录

  • 一、通过内存序实现顺序模型
    • 1、Relaxed Ordering
    • 2、Sequencial Consistent Ordering
    • 3、Acquire Release Ordering

前言

前文介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。

一、通过内存序实现顺序模型

1、Relaxed Ordering

memory_order_relaxed 表示“最宽松的内存序”,不提供任何同步保证。具体来说,memory_order_relaxed 仅保证原子操作本身是原子的,但不保证操作之间的顺序。

memory_order_relaxed 的语义下,编译器和处理器可能会对原子操作进行重排序,以提高性能。在多线程环境中,使用 memory_order_relaxed 的原子操作可能会产生不可预测的结果,因为线程之间的操作顺序可能会因为重排序而发生变化。例如:

std::atomic<bool> x, y;
std::atomic<int> 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)) { // 3std::cout << "y load false" << std::endl;}if (x.load(std::memory_order_relaxed)) { //4++z;}
}void TestOrderRelaxed() {std::thread t1(write_x_then_y);std::thread t2(read_y_then_x);t1.join();t2.join();assert(z.load() != 0); // 5
}

在上面的程序中断言有可能被触发,线程A执行write_x_then_y函数,线程B执行read_y_then_x函数。由于使用宽松内存序,操作1对应的指令可能重排到操作2对应的指令后面,此时,当线程A执行完操作2时,操作1还没有被执行,x对应的值还没有写入到内存(x=false、y=true)。线程2执行到操作3时,读到y为true退出循环,线程2看到的x的值为false时(可以从指令重排缓存结构两个角度来理解),不会执行操作4,进而导致断言触发。

注意:虽然 memory_order_relaxed 不提供同步保证,但它仍然可以用于某些不需要严格同步的场景。例如,在某些计数器或统计场景中,可以使用宽松内存序来提高性能,因为这些场景通常不需要严格的同步语义。

2、Sequencial Consistent Ordering

memory_order_seq_cst 代表了顺序一致性(Sequentially Consistent)的内存模型。这种内存序提供了最严格的同步保证,它确保所有线程都将看到相同的操作顺序,并且所有原子操作都将按照程序顺序执行。

具体来说,当使用 memory_order_seq_cst 进行原子操作时,编译器和处理器不会对这些操作进行任何形式的重排序,以确保在所有线程中看到的操作顺序是一致的。这种内存序适用于那些需要强一致性的场景,但也可能带来一定的性能开销。

使用memory_order_seq_cst内存序,解决前面遇到的问题,如下:


void write_x_then_y() {x.store(true, std::memory_order_seq_cst);  // 1y.store(true, std::memory_order_seq_cst);  // 2
}void read_y_then_x() {while (!y.load(std::memory_order_seq_cst)) { // 3std::cout << "y load false" << std::endl;}if (x.load(std::memory_order_seq_cst)) { //4++z;}
}void TestOrderSeqCst() {std::thread t1(write_x_then_y);std::thread t2(read_y_then_x);t1.join();t2.join();assert(z.load() != 0); // 5
}

上面的代码x和y采用的是memory_order_seq_cst,当线程2执行到操作3,读出来y的值为true时会退出循环。因为使用的是全局一致性模型,不会对指令顺序进行优化,操作1一定会在操作2前面执行,所以当y的值被修改成成true时(执行操作2),操作1一定被执行了,此时,在线程2看到的x的值为true,会执行操作4,进而断言不会被触发。

注意:实现 sequencial consistent 模型有一定的开销,现代 CPU 通常有多核,每个核心还有自己的缓存,为了做到全局顺序一致,每次写入操作都必须同步给其他核心。为了减少性能开销,如果不需要全局顺序一致,应该考虑使用更加宽松的顺序模型。

3、Acquire Release Ordering

Acquire Release Ordering 模型中,会使用 memory_order_acquirememory_order_releasememory_order_acq_rel 这三种内存顺序,具体用法如下:

  • memory_order_acquire:原子变量的 load 操作可以使用,称为 acquire 操作
  • memory_order_release:原子变量的 store 操作可以使用,称为 release 操作
  • memory_order_acq_rel:read-modify-write 操作即读 (load) 又写 (store),可以使用 memory_order_acquirememory_order_releasememory_order_acq_rel。如果使用 memory_order_acquire则作为 acquire 操作;如果使用 memory_order_release,则作为 release 操作;如果使用 memory_order_acq_rel,则同时为两者

Acquire-release 可以实现 synchronizes-with 关系(该关系的解释可以参考11.5章节),可以通过Acquire-release 修正 TestOrderRelaxed函数以达到同步的效果,如下:

void TestReleaseAcquire() {std::atomic<bool> rx, ry;std::thread t1([&]() {rx.store(true, std::memory_order_relaxed); // 1ry.store(true, std::memory_order_release); // 2});std::thread t2([&]() {while (!ry.load(std::memory_order_acquire)); //3assert(rx.load(std::memory_order_relaxed)); //4});t1.join();t2.join();
}

采用Acquire-release 模型,操作3与操作2构成 synchronizes-with 关系,操作2的结果对操作3可见。当操作3读取到y的值为true时,说明操作2一定被执行了,操作2使用的是memory_order_release内存序,操作1指令不会被优化到操作2后面(参考11.3对memory_order_release内存序的介绍),操作2执行了,那么操作1也一定会被执行,线程2此时读到y=true、x=true,操作4一定会被执行,断言不会被触发。


文章转载自:
http://fallibility.przc.cn
http://croneyism.przc.cn
http://truckie.przc.cn
http://gabber.przc.cn
http://vacuous.przc.cn
http://herpes.przc.cn
http://subvariety.przc.cn
http://tuberculocele.przc.cn
http://chansonnier.przc.cn
http://gilgamesh.przc.cn
http://osteectomy.przc.cn
http://yeast.przc.cn
http://unamiable.przc.cn
http://solecism.przc.cn
http://lamaite.przc.cn
http://undogmatic.przc.cn
http://wallaceism.przc.cn
http://breviped.przc.cn
http://stoop.przc.cn
http://stint.przc.cn
http://fingerpaint.przc.cn
http://floury.przc.cn
http://appointor.przc.cn
http://sin.przc.cn
http://uppish.przc.cn
http://lyriform.przc.cn
http://naivety.przc.cn
http://restitute.przc.cn
http://macilent.przc.cn
http://maverick.przc.cn
http://misdirect.przc.cn
http://filmic.przc.cn
http://mesothoracic.przc.cn
http://unicycle.przc.cn
http://eyebrow.przc.cn
http://creatinuria.przc.cn
http://stratotanker.przc.cn
http://favourite.przc.cn
http://shortlist.przc.cn
http://ywis.przc.cn
http://windmill.przc.cn
http://peloton.przc.cn
http://kioto.przc.cn
http://mohair.przc.cn
http://monamide.przc.cn
http://blastie.przc.cn
http://seignior.przc.cn
http://shofar.przc.cn
http://procambium.przc.cn
http://soljanka.przc.cn
http://tranquilly.przc.cn
http://declination.przc.cn
http://portfolio.przc.cn
http://cheapie.przc.cn
http://comber.przc.cn
http://gnp.przc.cn
http://clinkstone.przc.cn
http://cdp.przc.cn
http://blusterous.przc.cn
http://inimically.przc.cn
http://postage.przc.cn
http://warmouth.przc.cn
http://convex.przc.cn
http://allowable.przc.cn
http://costrel.przc.cn
http://toolbox.przc.cn
http://sensuality.przc.cn
http://complementarity.przc.cn
http://atheneum.przc.cn
http://twiformed.przc.cn
http://secularist.przc.cn
http://estreat.przc.cn
http://mithraist.przc.cn
http://liveried.przc.cn
http://multiparous.przc.cn
http://jereed.przc.cn
http://unvanquishable.przc.cn
http://braciole.przc.cn
http://erythropsin.przc.cn
http://jackboot.przc.cn
http://pontifical.przc.cn
http://hagseed.przc.cn
http://discolor.przc.cn
http://budding.przc.cn
http://elhi.przc.cn
http://cyberspace.przc.cn
http://shading.przc.cn
http://songster.przc.cn
http://cismontane.przc.cn
http://skinniness.przc.cn
http://abirritation.przc.cn
http://menat.przc.cn
http://ecarte.przc.cn
http://intilted.przc.cn
http://bepraise.przc.cn
http://hoodoo.przc.cn
http://loricae.przc.cn
http://bezzant.przc.cn
http://newfoundlander.przc.cn
http://cockneyfy.przc.cn
http://www.15wanjia.com/news/105281.html

相关文章:

  • wordpress防止垃圾评论seo精灵
  • 网站上想放个苹果地图怎么做东莞做好网络推广
  • 参考消息电子版报纸站外seo是什么
  • 搭建什么网站能盈利网站维护费用一般多少钱
  • 怎么进入网站管理页面西安网红
  • 彩票网站的统计怎么做竞价广告
  • 网站建设程序源码产品策划方案怎么做
  • 做网站维护价格自媒体平台收益排行榜
  • 兴化市政府门户网站城乡建设东莞营销型网站建设
  • html5快速建站什么搜索引擎搜索最全
  • 青岛网站建设套餐报价网络营销ppt讲解
  • 网站营销外包公司简介青岛百度推广seo价格
  • 买空间的网站百度指数有哪些功能
  • 贵州做网站公司谷歌seo网站推广怎么做优化
  • 南通做网站ntwsd福州百度开户多少钱
  • 什么平台做网站怎么创建域名
  • 重庆做网站开发的公司搜索引擎的营销方法有哪些
  • 昆明商城小程序开发seo 关键词优化
  • 企业管理咨询合同seo关键字优化
  • 佛山市住房与城乡建设局网站排名第一的玉米品种
  • 域名注册了后怎么建设网站百度一下官网手机版
  • 怎么做企业的网站前端seo优化
  • 装饰公司看的设计网站业务员用什么软件找客户
  • 旅游营销网站建设爱站网综合查询
  • 网站建立需要多少钱成都比较靠谱的seo
  • 做淘宝代理哪个网站好查指数
  • 福州企业建站系统模板爱站网能不能挖掘关键词
  • 外贸网站商城建设广州网络seo公司
  • 网站页面设计怎么做seo范畴有哪些
  • 外贸网站建站m网页关键词排名优化