2017-07-18 66 views
0

看看下面的示例,創建一個具有獨立線程的全局對象是否安全?

#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://stackoverflow.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

回答

-1

如果否,有什麼選擇。

懶惰的評估:直到第一次實際需要時才創建線程。