创建一个具有独立线程的全局对象是否安全?

问题描述:

看看下面的示例,创建一个具有独立线程的全局对象是否安全?

#include <iostream> 
#include <thread> 

class GPS 
{ 
public: 
    GPS() { this->init(); } 
    ~GPS() {m_thread.join();} 
private: 
    std::thread m_thread; 
    void init() { m_thread = std::thread(&GPS::update,this); } 
    void update() { /*get data from gps sensor.*/ }; 
}; 

GPS myGPS; 

int main() 
{ 
    return 0; 
} 

是什么/是全球范围内创建一个对象,它有它自己的线程的后果是什么?这是安全的方法吗?如果不是,假设对象必须是全局的并且具有独立的线程,那么有什么替代方案?谢谢。

+0

[主线程是否允许在进入main()之前产生一个POSIX线程?](https://*.com/questions/21771066/is-the-main-thread-allowed-to- spawn-a-posix-thread-before-it-entering-main) - 问题的表达方式有点不同,但接受的答案非常出色,并且与你的问题非常相关。另一种选择是梅耶斯的单身人士在“main”开始时首次初始化。 – Zulan

+0

@Zulan这不是POSIX线程,它是std线程。 – Yakk

+0

阅读答案。 – Zulan

如果否,有什么选择。

懒惰的评估:直到第一次实际需要时才创建线程。