访问singleton类的两个线程 - 不能正常工作

时间:2016-07-08 15:52:18

标签: c++ multithreading logging pthreads singleton

我正在使用pthread,此刻正在睡眠1秒钟,然后写入日志文件并打印到屏幕上。在我的int main()中,有一个while循环现在永远运行,但最终会停止。在循环中,它正在访问记录器,这是我的单例类,写入它,并打印到屏幕上。这是logger get instance funciton ...

Logger* Logger::getInstance(){
if(logger == NULL){
    logger = new Logger();
}

return logger;

}

这是等待一秒钟的线程函数......

void Beacon::send(){
while(1){
    sleep(1);
    Logger* logger = Logger::getInstance();
        logger->log("Sending");
}
}

这是也会打印到记录器的while循环。 checkQueue功能现在没有做任何事......

while(!a){

        logger->getInstance()->log("Checking...");
        checkQueue();



        if(a == true)
            break;

}

当我在while循环中登录时,它只会打印检查到屏幕。当我评论出来时,它将打印发送到屏幕。我是否需要在get实例函数中进行双锁检查?我一直在努力调查,但不明白如何实现它。

1 个答案:

答案 0 :(得分:2)

在C ++ 11中制作单例的最简单方法是:

MyClass& MyClass::getInstance() {
    static MyClass instance;
    return instance;
}

本地静态变量的初始化在C ++ 11中是线程安全的