我正在使用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实例函数中进行双锁检查?我一直在努力调查,但不明白如何实现它。
答案 0 :(得分:2)
在C ++ 11中制作单例的最简单方法是:
MyClass& MyClass::getInstance() {
static MyClass instance;
return instance;
}
本地静态变量的初始化在C ++ 11中是线程安全的