首页 >后端开发 >C++ >你能在 C 11 中创建一个线程安全的单例而不使用 `` 吗?

你能在 C 11 中创建一个线程安全的单例而不使用 `` 吗?

DDD
DDD原创
2024-10-30 02:34:29299浏览

Can You Create a Thread-Safe Singleton in C  11 Without Using ``?

如何在 C 11 中不使用 实现多线程安全单例

简介

自从引入多线程以来,在 C 11 中实现线程安全单例一直是争论的话题。虽然互斥体提供了一种实现线程安全的直接方法,但它们会带来性能开销。本文探讨了一种在不使用互斥体的情况下实现多线程安全单例的替代方法。

带有并发等待的延迟初始化

C 11 引入了一项新的语言功能,可以简化实现惰性初始化。如果静态局部变量已被初始化,并发执行现在将等待,从而无需手动锁定。

实现

检索单例实例的简单静态函数可以按如下方式实现:

<code class="cpp">static Singleton& get() {
  static Singleton instance;
  return instance;
}</code>

只要编译器正确实现该标准,此函数将在 C 11 中提供正确的行为。

阻止单例

尽管实现了这种简化,但作者强调,通常不鼓励使用单例。由于其固有的局限性,他们主张完全避免单例。

附加说明

  1. 原始代码中提到的clear()函数用于测试和不应包含在现实世界的单例实现中。
  2. 专家提供的响应中未引用原子库。
  3. 问题中包含的代码示例未在问题中进行分析回复。

以上是你能在 C 11 中创建一个线程安全的单例而不使用 `` 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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