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中文网其他相关文章!