避免在多线程环境中删除单一实例

avoid deletion of singleton in multithreaded environment

本文关键字:删除 单一 实例 环境 多线程      更新时间:2023-10-16

我在C++中有一个通用的单例类,它在单线程中工作,但是由于现在我要进入多线程环境,我想确保单例在那里工作,并且崩溃的一件事是多个线程正在尝试在该单个指针上调用删除。有没有办法不使用锁来避免此错误。

class singleton
{
public : 
    static singleton* getinstance();
private :
    singleton();
    singleton(const singleton& that);
    singleton& operator=(const singleton& that);
    static singleton* ptr;
};
这样

更好。没什么可抱怨的。干杯!

它在哪里被删除? 单例通常永远不会被删除;如果你想破坏它(你通常不这样做),你可以使用迈耶斯成语;否则,您分配一次,并且永远不会删除它。

线程问题更加微妙。 最简单的解决方案通常是为了确保instance在在线程开始之前至少一次,通常是由于静态变量的初始化。 一旦指针非空,它永远不会改变,所以没有问题线程。 (但这与删除任何内容无关。