首页 >后端开发 >C++ >Meyers 的单例实现在 C 11 和 C 03 中是线程安全的吗?

Meyers 的单例实现在 C 11 和 C 03 中是线程安全的吗?

Patricia Arquette
Patricia Arquette原创
2024-12-28 10:33:11198浏览

Is Meyers' Singleton Implementation Thread-Safe in C  11 and C  03?

Meyers 单例实现的线程安全

在提供的具有延迟初始化的 Meyers 单例实现中,代码在 C 语言中是线程安全的11. 根据 C 11 标准 (§6.7 [stmt.dcl] p4),如果多个线程尝试访问初始化期间单例,其他线程将等待初始化完成。

GCC 和 Visual Studio 都支持此线程安全功能(动态初始化和并发销毁),尽管实现日期不同:

  • Visual Studio:自 Visual Studio 2015 起支持
  • GCC:自 GCC 起支持4.3

相比之下,这段代码在 C 03 中不是线程安全的。Meyers 的文章“C 和双重检查锁定的危险”分析了单例模式的各种线程安全实现。最终,Meyers 得出结论:(在 C 03 中)在实例化方法周围使用完全锁是确保跨不同平台并发性的最直接方法。另一方面,双重检查锁定模式变体可能会在某些架构上引入竞争条件,除非在指令之间策略性地放置内存屏障。

以上是Meyers 的单例实现在 C 11 和 C 03 中是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn