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

我想自己卖特产怎么做网站win7优化大师

我想自己卖特产怎么做网站,win7优化大师,建物流网站,网站建设 域名 服务器文章目录 原子操作之compare_exchange_strong1 简介2 核心2 语法3 与 compare_exchange_weak的区别4 使用场景示例4.1 无锁计数器4.2 线程安全栈(Treiber Stack) 5 内存序(Memory Order)参数6 关键注意事项7 总结 原子操作之compa…

文章目录

  • 原子操作之compare_exchange_strong
    • 1 简介
    • 2 核心
    • 2 语法
    • 3 与 compare_exchange_weak的区别
    • 4 使用场景示例
      • 4.1 无锁计数器
      • 4.2 线程安全栈(Treiber Stack)
    • 5 内存序(Memory Order)参数
    • 6 关键注意事项
    • 7 总结

原子操作之compare_exchange_strong

1 简介

std::atomic 类型提供的一个关键原子操作.
作用:

  1. 实现无锁(lock-free)编程中的 比较并交换(Compare-and-Swap, CAS)
  2. 确保在多线程环境中安全地修改共享数据,避免竞态条件(race condition)。

2 核心

  1. 比较并交换

    • 输入参数
      • expected:期望的旧值(引用传递,操作后可能被修改)。
      • desired:希望设置的新值。
      • memory_order:内存序(可选,默认 std::memory_order_seq_cst)。
    • 操作逻辑
      • 如果原子变量的当前值等于 expected,则将其设置为 desired,并返回 true
      • 如果当前值不等于 expected,则将 expected 更新为当前值,并返回 false
  2. 原子性保证

    • 整个操作是原子的,不会被其他线程中断。

2 语法

bool compare_exchange_strong(T& expected, T desired,std::memory_order order = std::memory_order_seq_cst
);

3 与 compare_exchange_weak的区别

特性compare_exchange_strongcompare_exchange_weak
伪失败永远不会伪失败(总是严格的 CAS)允许在某些平台返回伪失败(即使值匹配)
适用场景需要确保操作成功的一次性场景循环中重试的场景(如自旋锁)
性能可能略低(需严格检查)可能更高(允许硬件优化)
典型代码模式单次检查(如无锁队列的精确条件)循环重试(如 while (!weak(...))

4 使用场景示例

4.1 无锁计数器

std::atomic<int> counter{0};void increment() {int old_val = counter.load();while (true) {int new_val = old_val + 1;if (counter.compare_exchange_strong(old_val, new_val)) {break; // 成功递增}// 失败时 old_val 已更新为当前值,继续重试}
}

4.2 线程安全栈(Treiber Stack)

template<typename T>
class LockFreeStack {struct Node {T data;Node* next;};std::atomic<Node*> head{nullptr};public:void push(const T& value) {Node* new_node = new Node{value, head.load()};while (!head.compare_exchange_strong(new_node->next, new_node));}bool pop(T& value) {Node* old_head = head.load();while (old_head && !head.compare_exchange_strong(old_head, old_head->next)) {}if (!old_head) return false;value = old_head->data;delete old_head;return true;}
};

5 内存序(Memory Order)参数

compare_exchange_strong 接受以下内存序(控制操作的原子性和可见性):

  • std::memory_order_relaxed:无同步(仅保证原子性)。
  • std::memory_order_acquire:当前线程的后续读操作必须在此操作后执行。
  • std::memory_order_release:当前线程的前序写操作必须在此操作前完成。
  • std::memory_order_acq_rel:结合 acquirerelease
  • std::memory_order_seq_cst:全局顺序一致性(默认,性能最低)。

6 关键注意事项

  1. ABA 问题

    • 如果 expected 值在操作期间被其他线程修改为其他值后又改回原值,compare_exchange_strong 会误认为值未变。
    • 解决方案:使用带版本号的原子变量(如 std::atomic<std::pair<T, uint64_t>>)或 hazard pointer
  2. 循环重试

    • 在冲突激烈时,compare_exchange_strong 可能导致忙等待(busy-wait),需结合退避策略(如指数退避)。
  3. 性能优化

    • 在循环中使用 compare_exchange_weak 更高效(如自旋锁),而 compare_exchange_strong 适合单次检查。

7 总结

compare_exchange_strong 是 C++ 无锁编程的核心工具,通过严格的 CAS 语义保证线程安全。使用时需结合内存序参数、循环重试机制,并警惕 ABA 问题。在需要精确条件判断时优先使用 strong 版本,而在循环中可优先使用 weak 版本以提升性能。

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

相关文章:

  • it运维外包服务文登seo排名
  • 网站如何引导客户网址收录查询
  • 最新免费网站收录提交入口软文推广的优点
  • 网站建设服务费最近新闻
  • 广东富盈建设有限公司企业网站地推拉新app推广怎么做
  • 建设宁波市分行的互联网网站网络营销主要内容
  • 陕西建设教育网站网站怎么做
  • 个人网站网页首页西安网站建设优化
  • 青岛新闻网官方网站网店代运营公司
  • 代做网站微信号济南seo优化公司
  • 微企免费网站建设淮北seo排名
  • 建阳网站建设百度推广平台登录入口
  • 什么是h5开发抖音seo推广
  • 赤峰做网站建设的企业百度网站怎么做
  • 邵阳做网站建设网络整合营销推广
  • 手机版的网站制作百度权重高的发帖网站
  • 网站开发开始阶段的主要任务包括( )百度网址安全检测中心
  • 个人建立一个网站要多少钱百度app下载安装
  • 网站建设设计师的工作内容淘宝seo是指什么
  • 法院网站建设方案网站换了域名怎么查
  • wordpress字体推荐seo搜索优化工程师招聘
  • 网站优化套餐网站建站方式有哪些
  • 今日最新抗疫数据廊坊seo排名
  • 佛山专业做企业网站酒店营销推广方案
  • 手机网站单页面seo优化文章网站
  • 不记得域名管理网站石家庄网络关键词排名
  • 网站地图怎么做一键导航免费刷推广链接的网站
  • 做网站数据需求分析网站为什么要seo?
  • 如何把旅行社网站做的好看企业网站建设的步骤
  • 盐城网站建设找哪家好免费做网站网站