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

个人信息网站建设的心得体会提供网站建设排行榜

个人信息网站建设的心得体会,提供网站建设排行榜,洋县住房和城乡建设管理局网站,tamed wordpress插件汉化文章目录 1. std::shared_ptr 的线程安全问题2. std::shared_ptr 原子操作函数2.1 原子读取和存储2.2 原子交换2.3 原子比较交换 3. 注意事项4. 示例5. 总结 在多线程编程中,线程安全是一个至关重要的问题。C11 引入了 std::shared_ptr,它通过引用计数机…

文章目录

    • 1. `std::shared_ptr` 的线程安全问题
    • 2. `std::shared_ptr` 原子操作函数
      • 2.1 原子读取和存储
      • 2.2 原子交换
      • 2.3 原子比较交换
    • 3. 注意事项
    • 4. 示例
    • 5. 总结

在多线程编程中,线程安全是一个至关重要的问题。C++11 引入了 std::shared_ptr,它通过引用计数机制提供了资源管理的便利性。然而,当多个线程需要共享和操作同一个 std::shared_ptr 对象时,线程安全问题仍然需要特别关注。幸运的是,C++ 标准库提供了针对 std::shared_ptr 的原子操作函数,这些函数可以帮助我们安全地在多线程环境中使用 std::shared_ptr

1. std::shared_ptr 的线程安全问题

std::shared_ptr 的控制块是线程安全的,这意味着不同的 std::shared_ptr 对象可以同时访问同一个控制块,而不会引发数据竞争。然而,当多个线程需要访问和修改同一个 std::shared_ptr 对象时,问题就出现了。例如,如果一个线程正在通过 resetoperator= 修改 std::shared_ptr 的指向,而另一个线程正在读取它的值,那么就可能发生数据竞争。

2. std::shared_ptr 原子操作函数

为了在多线程环境中安全地使用 std::shared_ptr,C++11 引入了一系列原子操作函数。这些函数允许我们以原子方式对 std::shared_ptr 进行读取、存储、交换和比较交换操作。

2.1 原子读取和存储

  • std::atomic_loadstd::atomic_store:这两个函数允许我们以原子方式读取和存储 std::shared_ptr 的值。它们的显式版本(std::atomic_load_explicitstd::atomic_store_explicit)还允许我们指定内存顺序。
std::shared_ptr<int> ptr = std::make_shared<int>(42);
std::shared_ptr<int> loaded_ptr = std::atomic_load(&ptr); // 原子读取
std::atomic_store(&ptr, std::make_shared<int>(100)); // 原子存储

2.2 原子交换

  • std::atomic_exchange:这个函数允许我们以原子方式交换 std::shared_ptr 的值。它会返回交换前的值。
std::shared_ptr<int> ptr = std::make_shared<int>(42);
std::shared_ptr<int> new_ptr = std::make_shared<int>(100);
std::shared_ptr<int> old_ptr = std::atomic_exchange(&ptr, new_ptr); // 原子交换

2.3 原子比较交换

  • std::atomic_compare_exchange_weakstd::atomic_compare_exchange_strong:这两个函数允许我们以原子方式进行比较交换操作。它们的显式版本(std::atomic_compare_exchange_weak_explicitstd::atomic_compare_exchange_strong_explicit)还允许我们指定成功和失败时的内存顺序。
std::shared_ptr<int> ptr = std::make_shared<int>(42);
std::shared_ptr<int> expected = ptr;
std::shared_ptr<int> desired = std::make_shared<int>(100);
if (std::atomic_compare_exchange_strong(&ptr, &expected, desired)) {// 交换成功
} else {// 交换失败
}

3. 注意事项

  • 互斥锁实现:这些原子操作函数通常使用互斥锁实现。这意味着它们可能比直接操作 std::shared_ptr 更慢,但在多线程环境中是安全的。
  • 全局哈希表:互斥锁存储在全局哈希表中,指针值用作键。这可能会导致性能问题,尤其是在高并发场景下。
  • 并发 TS:并发 TS 提供了原子智能指针类 atomic_shared_ptratomic_weak_ptr,以替代对这些函数的使用。这些类提供了更直观的语法和更好的性能。

4. 示例

以下是一个使用 std::shared_ptr 原子操作函数的简单示例:

#include <iostream>
#include <memory>
#include <thread>
#include <atomic>void worker(std::shared_ptr<int> ptr) {std::shared_ptr<int> loaded_ptr = std::atomic_load(&ptr);std::cout << "Loaded value: " << *loaded_ptr << std::endl;
}int main() {std::shared_ptr<int> ptr = std::make_shared<int>(42);std::thread t1(worker, std::ref(ptr));std::thread t2(worker, std::ref(ptr));t1.join();t2.join();return 0;
}

在这个示例中,两个线程同时读取 std::shared_ptr 的值。通过使用 std::atomic_load,我们可以确保读取操作是原子的,从而避免数据竞争。

5. 总结

std::shared_ptr 的原子操作函数为我们提供了一种在多线程环境中安全使用 std::shared_ptr 的方法。虽然这些函数的实现可能涉及互斥锁,从而导致性能开销,但它们可以有效避免数据竞争。在高并发场景下,建议使用并发 TS 提供的原子智能指针类,以获得更好的性能。
std::atomic_… std::shared_ptr - cppreference.cn - C++参考手册

文章转载自:

http://wV2xFXG1.dnhdp.cn
http://QkXHfg7o.dnhdp.cn
http://ylTaf38D.dnhdp.cn
http://o8COWL9P.dnhdp.cn
http://JX9q8MAW.dnhdp.cn
http://M0PJdzbn.dnhdp.cn
http://ZuA1pcXc.dnhdp.cn
http://xShV7jhT.dnhdp.cn
http://ce8CwjQt.dnhdp.cn
http://kaeXqfPz.dnhdp.cn
http://9Ok9obzN.dnhdp.cn
http://MGUsNSr6.dnhdp.cn
http://f6x8yKUI.dnhdp.cn
http://kYGRHjBr.dnhdp.cn
http://c2pb5HsC.dnhdp.cn
http://qWeP1E25.dnhdp.cn
http://sSZtaAhd.dnhdp.cn
http://UmzPQTMY.dnhdp.cn
http://pQOnajrq.dnhdp.cn
http://Vw0w8QkY.dnhdp.cn
http://ahQK1HQu.dnhdp.cn
http://Psd3q09Y.dnhdp.cn
http://NaXCpT7N.dnhdp.cn
http://MpctO4ck.dnhdp.cn
http://5UCTAwZ5.dnhdp.cn
http://KyLLid2S.dnhdp.cn
http://L83fSVra.dnhdp.cn
http://TI1vqtVb.dnhdp.cn
http://mtY9QDDz.dnhdp.cn
http://JHdrE17c.dnhdp.cn
http://www.dtcms.com/wzjs/779794.html

相关文章:

  • 有多少收费网站推销产品什么网站好
  • 先申请网站空间wordpress 信息流模板
  • 贵州省住房和城乡建设部网站青岛十大外贸公司
  • 弹幕网站是怎么做的wordpress 分类 权限
  • 英文站 wordpress seo优化湛江建设网站
  • 益阳建设网站租车网站建设方案
  • 哈尔滨松北区建设局网站网站简单布局图
  • 称心的赣州网站建设网站加v怎么做
  • 自己做网站练手步骤拼音
  • 做平面什么网站的素材不侵权tp框架做展示网站
  • 简单的网站类型有哪些内容如何建设一个收费的影视图文网站
  • 个人网站怎么建立要多少钱wordpress post type
  • 做app网站有哪些功能wordpress網頁版
  • 重庆网站建设选圣矢关于进一步加强网站建设和
  • 做直播网站需要学什么软件有哪些为什么网站需要备案
  • 上海网站优化海移动深圳网站
  • 南城网站建设公司建设企业网站的人员组成
  • 网站建设与电子商务的教案南通网站推广优化费用
  • 工作站做网站企业网站报价方案下载
  • 营销型网站功能表检察院前期网站建设
  • 湘潭做网站推荐磐石网络注册安全工程师报考条件及科目
  • 中文响应式网站和wordpress价值
  • 营口房产建设信息网站网页设计实训内容及过程
  • 学校诗歌网站建设冷水滩做微网站
  • 网站优化北京哪家强?上海建工一建集团有限公司
  • 自己做网站卖货多少钱网站上做旅游卖家要学什么条件
  • 淄博专业网站建设公司虚拟网站源码
  • 西安做网站朋朋计算机网络技术毕业设计
  • 智能网站推广优化上海珍岛做网站怎么样
  • 想做水果外卖怎么做网站公司商标注册怎么弄