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

小网站备案湖南网站推广

小网站备案,湖南网站推广,wordpress棋牌插件,网站项目框架1. 引用计数的线程安全性 完全线程安全&#xff1a;shared_ptr 的引用计数机制本身是线程安全的&#xff0c;这是通过原子操作实现的。 实现原理&#xff1a; // 伪代码示意 class control_block {std::atomic<long> ref_count; // 原子引用计数//... };void increment…

1. 引用计数的线程安全性

  • 完全线程安全shared_ptr 的引用计数机制本身是线程安全的,这是通过原子操作实现的。

  • 实现原理

    // 伪代码示意
    class control_block {std::atomic<long> ref_count;  // 原子引用计数//...
    };void increment_ref_count() {ref_count.fetch_add(1, std::memory_order_relaxed);
    }void decrement_ref_count() {if (ref_count.fetch_sub(1, std::memory_order_acq_rel) == 1) {delete managed_object;  // 安全删除对象}
    }
    • 使用 std::atomic 保证引用计数的增减是原子操作

    • 增加计数用 memory_order_relaxed(只需原子性,无顺序约束)

    • 减少计数用 memory_order_acq_rel(保证删除对象前的所有操作可见)

2. 指向对象的线程安全性

  • 非线程安全shared_ptr 不保证其管理的对象是线程安全的

    // 危险示例:多个线程同时修改同一对象
    std::shared_ptr<int> p = std::make_shared<int>();void thread_func() {p->value++;  // 非原子操作,数据竞争!
    }

    需要额外同步机制(如互斥锁)保护对象内部状态。


3. shared_ptr 实例本身的线程安全性

操作类型线程安全性示例
多个线程同一实例✅ 安全auto p2 = p1;(拷贝构造)
多个线程写不同实例✅ 安全p1.reset(); p2.reset();
多个线程写同一实例❌ 不安全(需加锁)p1 = p2;(赋值操作竞争)

关键机制解析

  1. 原子引用计数的实现

    • 控制块(control block)中的计数器使用原子类型

    • 增减操作通过 CPU 级原子指令实现(如 x86 的 LOCK XADD

    • 保证即使多线程同时拷贝/析构,引用计数也准确

  2. 内存序的作用:

    memory_order_acq_rel 在减少计数时确保:删除对象前,所有线程对对象的操作已完成;避免指令重排序导致对象提前释放
  3. 对象删除安全性
    // 删除对象时的保护逻辑
    if (ref_count.fetch_sub(1) == 1) {  // 原子减后判断// 只有最后一个持有者执行删除delete ptr; 
    }


线程安全使用指南

  1. 安全模式

    // 多线程共享只读对象
    std::shared_ptr<const Config> config = load_config();
    // 所有线程安全读取 config->getValue()
  2. 需加锁场景

    std::shared_ptr<Data> resource;
    std::mutex mtx;void update() {std::lock_guard<std::mutex> lk(mtx);resource = std::make_shared<Data>(new_data); // 安全更新
    }
  3. 高效跨线程传递

    // 使用 std::move 避免原子操作开销
    std::shared_ptr<Job> job = create_job();
    std::thread worker([job = std::move(job)] {// 独占使用,无引用计数开销
    });
  4. 弱引用解决循环依赖

    std::weak_ptr<Node> weak_node = node;
    if (auto locked = weak_node.lock()) { // 原子检查// 安全使用 locked
    }
http://www.dtcms.com/wzjs/840897.html

相关文章:

  • 百度建站云南服务中心犀牛云做网站怎么这么贵
  • 深圳中高端网站建设网站平台建设方案的难点重点
  • 内存数据库 网站开发益阳网站建设详细教程
  • 网站建设具体要求WordPress记录访问者ip
  • 重庆网站建设公司哪个最好网站后台更新无法在网页显示
  • 深圳专业商城网站制作建网站商城
  • 做网站开发的过程建站公司都是如何为建站服务定价的
  • 网站运营推广的方法有哪些tiktok无货源跨境电商怎么做
  • flash做网站的流程白之家低成本做网站
  • 中文手机网站设计案例做网站连接数据库怎么显示图片
  • wordpress建站要钱吗wordpress图片被强制放大
  • 做ppt的兼职网站app软件开发策划书
  • 专业做厂房的网站网站建设与维护期中试卷
  • 大学文明校园网站建设方案做网站的开发语言
  • 简述商务网站建设的步骤大学生网页设计主题
  • 上海建智建设人才培训中心网站产品包装设计网
  • php自适应网站开发怎么查询商标名称是否注册
  • 做网站都是怎么收费网站内容如何优化
  • wordpress微信机器人高级版 免费开封网站seo
  • 网站建设 设计那种连接线厂家做神马seo快速排名软件
  • 网站建设阶段西安中风险地区有哪些
  • 网站建设与维护的题目个人怎么申请营业执照
  • 建设网站行业云改图宝在线编辑图片
  • 网站建设空间和服务器方式关于美食html网页设计实例代码
  • 广水市建设局网站wordpress设置在新页面打开空白
  • 找人建设一个网站大概需要多少费用可以做装修效果图的网站
  • 免费模板素材网站ppt自然资源部网站绿色矿山建设
  • 官方查企业的网站被墙域名黑别人网站
  • 怎么样做网站才能适应手机屏幕做网站自己不会维护怎么办
  • 12380 举报网站建设全国高速公路施工建设有没有网站