首页 > 后端开发 > C++ > Meyers 的单例模式在 C 11 及更高版本中是线程安全的吗?

Meyers 的单例模式在 C 11 及更高版本中是线程安全的吗?

Patricia Arquette
发布: 2024-12-30 17:04:10
原创
898 人浏览过

Is Meyers' Singleton Pattern Thread-Safe in C  11 and Later?

Meyers 单例模式实现的线程安全

这种使用延迟初始化的 Meyers 单例模式实现引发了有关其线程安全性的问题。

迈耶斯单例实现

单例模式提供的代码如下:

static Singleton& instance()
{
     static Singleton s;
     return s;
}
登录后复制

线程安全分析

在C 11中,这个由于 §6.7 [stmt.dcl] 中的保证,实现是线程安全的p4:

“如果在初始化变量时控制同时进入声明,则并发执行应等待初始化完成。”

GCC(自版本 4.3 起)和 Visual 等编译器Studio(自 2015 年起)支持此功能。

C 03实现

在 C 03 中,代码不是线程安全的。 Meyers 的文章“C 和双重检查锁定的危险”讨论了此类问题。建议对实例化方法进行完全锁定以保证并发性,而双重检查锁定变体可能会在没有内存障碍的特定架构上遇到竞争条件。

以上是Meyers 的单例模式在 C 11 及更高版本中是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板