簡體   English   中英

pthread線程變量何時在靜態初始化期間開始存在?

[英]When do pthread thread variables begin existing during static initialisation?

我正在編寫一個使用靜態方法和屬性的程序,以使某些事情在main之前解決。 語言是C ++ 11

我的問題是,什么時候可以保證(帶有pthread的)線程局部變量存在? 即我可以在main開始之前在主線程的靜態初始化中安全地設置線程局部變量嗎?

我可以在main開始之前為主線程安全地在靜態初始化中安全地設置線程局部變量嗎?

C ++編程語言,第四版,Bjarne Stroustrup:

12.1.8。 局部變量

函數中定義的名稱通常稱為本地名稱。 當執行線程達到其定義時,將初始化局部變量或常量。 除非聲明為靜態,否則函數的每次調用均具有其自己的變量副本。 如果將局部變量聲明為靜態,則將在函數的所有調用中使用單個靜態分配的對象(第6.4.2節)來表示該變量。 僅在執行線程第一次達到其定義時才會對其進行初始化。 例如:...

15.4.1。 非局部變量的初始化....

非本地(靜態分配的)變量的初始化由實現用來啟動C ++程序的任何機制控制。 只有執行main()時,才能保證此機制正常工作。

盡管您指的是線程局部變量 ,但由於初始化代碼本身顯然是全局static ,因此您無法保證在main()開始運行之前已執行了初始化代碼,因此,如果您擁有依賴於其他靜態變量的靜態變量,則可以有問題。

但是一旦main()執行,您的所有static代碼都已初始化。 如果是這樣,則可以保證在main()中引用的靜態資源可用。

如果您的線程局部變量在屬於靜態成員或全局靜態變量的線程變量中聲明,則必須執行main()以便初始化靜態線程,並且取決於您如何聲明您的線程局部變量,也將在此處啟動該線程局部變量靜態將在達到其執行點時進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM