Meyers 单例实现的线程安全
在提供的具有延迟初始化的 Meyers 单例实现中,代码在 C 语言中是线程安全的11. 根据 C 11 标准 (§6.7 [stmt.dcl] p4),如果多个线程尝试访问初始化期间单例,其他线程将等待初始化完成。
GCC 和 Visual Studio 都支持此线程安全功能(动态初始化和并发销毁),尽管实现日期不同:
相比之下,这段代码在 C 03 中不是线程安全的。Meyers 的文章“C 和双重检查锁定的危险”分析了单例模式的各种线程安全实现。最终,Meyers 得出结论:(在 C 03 中)在实例化方法周围使用完全锁是确保跨不同平台并发性的最直接方法。另一方面,双重检查锁定模式变体可能会在某些架构上引入竞争条件,除非在指令之间策略性地放置内存屏障。
以上是Meyers 的单例实现在 C 11 和 C 03 中是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!