我在C++中实现了一个单例(静态版本)。我知道关于这个模式的所有争议和潜在的线程安全问题,但我很好奇为什么这个确切的实现不会停止。程序永远不会退出,它在结束时仍处于死锁状态。
singleton.h:
#pragma once
#include <thread>
#include <atomic>
class Singleton
{
public:
static Singleton& getInstance();
private:
std::thread mThread;
std::atomic_bool mRun;
Singleton();
~Singleton();
void threadFoo();
};
singleton.cpp
#include "singleton.h"
Singleton& Singleton::getInstance()
{
static Singleton instance;
return instance;
}
Singleton::Singleton()
{
mRun.store(true);
mThread = std::thread(&Singleton::threadFoo, this);
}
Singleton::~Singleton()
{
mRun.store(false);
if(mThread.joinable())
mThread.join();
}
void Singleton::threadFoo()
{
while(mRun)
{
}
}
main.cpp
#include "singleton.h"
int main()
{
Singleton::getInstance();
return 0;
}
我已经知道的是:
使用Visual Studio 2012。谢谢你的建议。
https://stackoverflow.com/questions/17093164
复制相似问题