首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个C++静态单例永远不会停止?

为什么这个C++静态单例永远不会停止?
EN

Stack Overflow用户
提问于 2013-06-14 01:16:17
回答 6查看 3K关注 0票数 17

我在C++中实现了一个单例(静态版本)。我知道关于这个模式的所有争议和潜在的线程安全问题,但我很好奇为什么这个确切的实现不会停止。程序永远不会退出,它在结束时仍处于死锁状态。

singleton.h:

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "singleton.h"

int main()
{
    Singleton::getInstance();
    return 0;
}

我已经知道的是:

  • 线程终止
  • 主线程卡在join
  • 中它与静态有关,如果我将构造函数设为公共,并在main()中创建一个单例实例,它将正确终止。

使用Visual Studio 2012。谢谢你的建议。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17093164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档