创建线程安全单例 (C++) 时的临界区初始化

Posted

技术标签:

【中文标题】创建线程安全单例 (C++) 时的临界区初始化【英文标题】:Critical section initialization when creating thread-safe singleton (C++) 【发布时间】:2010-06-02 06:44:55 【问题描述】:

我正在尝试执行此解决方案中建议的相同操作:

How can I create a thread-safe singleton pattern in Windows?

但是,临界区应该在哪里初始化和取消初始化呢?

【问题讨论】:

【参考方案1】:

将临界区包装到一个类中(使用现成的或自己制作)并声明该类的全局变量 - 然后临界区将在程序启动期间初始化并在程序退出时取消初始化。由于启动和退出是在一个线程上完成的,因此它可以可靠地工作。

【讨论】:

明白你在说什么。谢谢!【参考方案2】:

使用 pthread_once() 可以在第一次使用之前初始化临界区。 Windows 有InitOnceExecuteOnce 功能。

【讨论】:

使用 boost(而不是 pthread_once() ),您可以使用像我在这个中所做的那样的解决方案:***.com/questions/2955921/… 如果你有pthread,你就不需要windows临界区

以上是关于创建线程安全单例 (C++) 时的临界区初始化的主要内容,如果未能解决你的问题,请参考以下文章

C++多线程同步技巧 --- 临界区

c++多线程问题

如何创建线程?如何保证线程安全?

线程同步与互斥详解

java并发 day02 临界区和竞态条件synchronized线程安全 对象头 Monitor管程 wait notifypark&unpark ReentrantLock

java并发 day02 临界区和竞态条件synchronized线程安全 对象头 Monitor管程 wait notifypark&unpark ReentrantLock