2014-04-23 38 views
1

在C++中,我是否必須擔心靜態初始化期間在對象上運行的多個線程,還是保證由單個線程執行?C++,是由多個線程執行的靜態初始化?

+0

通常靜態初始化是在應用程序啓動時完成的,所以此時只有一個線程 –

+0

據我所知,C++ 11只保證只有一個線程完成。我敢打賭,有人可以在答案中引用標準。澄清你是指一個靜態變量在一個函數體中還是一個靜態的全局或類成員,這些規則是不同的 – odinthenerd

+0

你的對象的初始化會發生什麼,使你對多線程保持謹慎? –

回答

2

對於全球範圍的static變量,是的。

對於本地static s(在函數內部聲明),此保證僅適用於C++ 11和之後。

+0

嗨Luchian,你的意思是說:「是的,我確實需要擔心多個線程」或者「是的,在C++ 11之後和之後,是由單個線程執行的」。 – Nick

+0

@Nick保證線程安全。 –

0

一個小小的警告:做任何你的全局範圍靜態對象從它們的構造函數產生線程?如果是這樣,這些線程將在靜態初始化時間內運行。