2016-12-30 48 views
1

正如標題所示:是一個std::thread一個靜態持續對象嗎?還是它使用一些,即使我不明確訪問靜態變量?線程 - 它是一個靜態持續對象嗎?

編輯:

n2440說(放棄一個Process):

靜態持續時間的對象的破壞的主要問題是訪問靜態持續時間的對象的析構函數都執行之後,因此導致未定義的行爲。爲了避免這個問題,N2382動態初始化和併發銷燬要求所有用戶線程在銷燬開始之前完成(通過調用退出或從主返回)。

即使線程沒有顯式地訪問任何標記爲static的變量,

+2

什麼是'靜態持續對象'? – JerryGoyal

+1

您的問題含糊不清,請修改以使其更加明確。 「*還是使用一些*」? –

+0

澄清並添加更多詳細信息。我不能更清楚這個 – Dean

回答

2

std::thread是一類,它沒有任何存儲時間。

std::thread的對象(或實例)可以具有任何存儲持續時間(靜態(全局),自動(在堆棧上),動態(在堆中))。

n2440(放棄進程)涉及在全局對象被銷燬後訪問。當main返回時可能會發生這種情況,但仍有額外的線程在運行並訪問全局對象(例如std::cout),這些對象現在正在被主線程銷燬。

+0

,所以它不適用,如果我在'main()'上創建一個'std :: thread',除了在無限循環中旋轉之外什麼都不做,因爲它不會有任何靜態存儲時間,對不對? – Dean

+1

@Dean它取決於你如何創建'std :: thread'(堆棧或堆)以及它是否被分離。見http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0206r0.html –