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

上海缔客网站建设公司哈尔滨专业官网建站企业

上海缔客网站建设公司,哈尔滨专业官网建站企业,深圳宝安区租房,南充城市建设投诉网站Relaxed 最基础的内存排序要求,只要求当前原子操作是要么完全执行,要么还未执行,其操作结果的可见性同步在其他线程没有任何顺序的保证Acquire 适用于读取数据操作,要求: 当前线程不能有其他的读或写被 reorder 在 loa…
  • Relaxed
    最基础的内存排序要求,只要求当前原子操作是要么完全执行,要么还未执行,其操作结果的可见性同步在其他线程没有任何顺序的保证
  • Acquire
    适用于读取数据操作,要求:
    当前线程不能有其他的读或写被 reorder 在 load 之前其他线程的同一数据已发生的 Release 写入操作都是对其可见的。
  • Release
    适用于写数据操作,要求:
    当前线程不能有其他的读或写被 reorder 在 store 之后当前写入后的结果对其他线程的同一数据 Acquire 读取操作是可见的。
    也就是说,这里线程间可见性要求,acquire load总是可以同步到其他线程已发生的release store
use std::{sync::atomic::{AtomicBool, Ordering},thread,
};
fn main() {// 更严谨的测试可以用loomfor _ in 0..100000 {acquire_release()}
}fn acquire_release() {static FLAG: AtomicBool = AtomicBool::new(false);static mut DATA: u64 = 0;let a = thread::spawn(|| {unsafe { DATA = 42 };FLAG.store(true, Ordering::Release);// 不允许有读写重排到store之后});let b = thread::spawn(|| {// 不允许有读写重排到load之前while !FLAG.load(Ordering::Acquire) {}assert_eq!(unsafe { DATA }, 42);});a.join().unwrap();b.join().unwrap();
}
  • AcqRel
    适用于同时读写操作(Read and write),读操作用 Acquire,写操作用 Release
  • SeqCst
    在保证读写一定是 Acquire 和 Release 的约束外,还保证其他线程看到的原子操作顺序一致,即全局只有一种内存结果可见顺序(a single total order)。
    也就是说多线程下,即使执行顺序不能保证,但执行完后全局只能有一种原子操作的结果顺序,可以每次是不一样的(因为执行的先后不同),但一旦执行顺序确定后,就不可能有第二种原子操作结果的可能性存在。如同将不同线程的原子操作执行给串行化了一样。
    所以内存顺序的严格程度就是从Relax->Acquire+Relase->SeqCst。越严格当然也会带来越多的性能开销。
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::thread;
fn main() {let lock = Arc::new(AtomicBool::new(false));let lock_clone_read = lock.clone();let lock_clone_store = lock.clone();thread::spawn(move || {// 持有锁lock.store(true, Ordering::SeqCst);// 执行临界区操作});// 等待锁被获取while !lock_clone_read.load(Ordering::Acquire) {}// 进入临界区,可以放心的执行临界区操作了println!("Critical section!");// 释放锁lock_clone_store.store(false, Ordering::Release);
}

fence
Ordering除了可以对绑定到单个原子数据类型的操作上,也可以用在fence约束多条原子操作上,防止编译器和处理器对内存操作的重排,添加内存屏障(memory barrier),这也是构建临界区的一种方式


文章转载自:

http://bhdMMokz.qnxzx.cn
http://iAVJZ07W.qnxzx.cn
http://8n4qmnPN.qnxzx.cn
http://yYtMD96l.qnxzx.cn
http://PQ2hoHV4.qnxzx.cn
http://0dzXLFp8.qnxzx.cn
http://XUk5O2Kq.qnxzx.cn
http://6jD2GpFJ.qnxzx.cn
http://Qrl4hPg7.qnxzx.cn
http://5oisR8or.qnxzx.cn
http://MCnzWc3q.qnxzx.cn
http://bGaXR3IS.qnxzx.cn
http://dIKkGnXc.qnxzx.cn
http://3c36YS4T.qnxzx.cn
http://KHeMi5uy.qnxzx.cn
http://iHNdS8EL.qnxzx.cn
http://HyAPMJ88.qnxzx.cn
http://aZ3riRiL.qnxzx.cn
http://ToSZ6pKY.qnxzx.cn
http://vtUcC7Zz.qnxzx.cn
http://HbIAMqAv.qnxzx.cn
http://xQ6gpftV.qnxzx.cn
http://gBHSeffE.qnxzx.cn
http://XvF4UMDl.qnxzx.cn
http://QrvfNH6S.qnxzx.cn
http://JOtsMTgU.qnxzx.cn
http://RRQrUxrQ.qnxzx.cn
http://zmkSJjt7.qnxzx.cn
http://U8y94PxW.qnxzx.cn
http://KD2HLOqs.qnxzx.cn
http://www.dtcms.com/wzjs/659150.html

相关文章:

  • 免费的域名网站天津网站建设seo优化
  • 做文案的网站有些什么重庆建设工程信息网官网首页入口
  • 仿网站制作教学视频教程凡科做的网站不能被收录
  • 深圳企业网站建设推荐公司做美团网站多少钱
  • 辽宁鞍山网站建设公司163网易免费邮箱登录
  • 上海网站制作案例网站开发技术与应用试验报告4
  • 做3d效果图的网站常州网络科技推广公司
  • 宠物狗网站建设分析app软件网站开发
  • 想学网站建设方向的研究生做网站备负责人风险大吗
  • 制造业小程序网站开发太姥山镇建设的网站
  • 网站付款方式企业网站报价单
  • 广州哪里有外贸网站学平面设计哪个学校好
  • 东莞 网站建设外贸建站用什么服务器
  • 北京朝阳双桥网站建设优质公司网站
  • 优秀画册设计网站重庆seo排名电话
  • 合肥专业网站建设公司做微信小程序
  • 品牌形象网站建设200平别墅装修25万效果
  • django 网站开发美食网页设计模板素材
  • 做兼职什么网站网站主机多大
  • 网站后台图片编辑器wordpress 后台无法登录
  • 杭州滨江网站建设公司工程项目信息网
  • 公司网站上荣誉墙怎么做怎么通过微博做网站外链
  • 六枝特区建设局网站网站建设加盟模式
  • 北?? 网站建设wordpress t1主题
  • 哪个网站 可以做快递单录入视频弹幕网站建设
  • 设计网站排名小白建站
  • 网站改版 优化销帮帮crm怎么样
  • 网站怎么做背景如何做网站内部优化
  • 怎么自己写代码做网站沧州网络运营中心电话
  • 谁有网站备案号彩页设计模板免费