创建一个具有独立线程的全局对象是否安全?
问题描述:
看看下面的示例,创建一个具有独立线程的全局对象是否安全?
#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;
}
是什么/是全球范围内创建一个对象,它有它自己的线程的后果是什么?这是安全的方法吗?如果不是,假设对象必须是全局的并且具有独立的线程,那么有什么替代方案?谢谢。
答
如果否,有什么选择。
懒惰的评估:直到第一次实际需要时才创建线程。
[主线程是否允许在进入main()之前产生一个POSIX线程?](https://*.com/questions/21771066/is-the-main-thread-allowed-to- spawn-a-posix-thread-before-it-entering-main) - 问题的表达方式有点不同,但接受的答案非常出色,并且与你的问题非常相关。另一种选择是梅耶斯的单身人士在“main”开始时首次初始化。 – Zulan
@Zulan这不是POSIX线程,它是std线程。 – Yakk
阅读答案。 – Zulan