我讀到C++中有一個新的關鍵字:它是我讀過的__thread
。在C++中使用__thread 0x
我只知道它是一個關鍵字,就像static
關鍵字一樣使用,但我什麼也不知道。這是否只是關鍵字意味着,例如,如果一個變量被宣佈像這樣:
__thread int foo;
那麼任何與該變量將與一個新的線程來執行?
我讀到C++中有一個新的關鍵字:它是我讀過的__thread
。在C++中使用__thread 0x
我只知道它是一個關鍵字,就像static
關鍵字一樣使用,但我什麼也不知道。這是否只是關鍵字意味着,例如,如果一個變量被宣佈像這樣:
__thread int foo;
那麼任何與該變量將與一個新的線程來執行?
這是thread_local
,而不是__thread
。它用於定義具有線程存儲持續時間的變量。
thread_local
是新的在C++ 0x中添加了存儲持續時間說明符。還有其他的存儲持續時間:靜態,自動和動態。
線程本地存儲持續時間(C++ 11功能)。變量在線程開始時分配,線程結束時釋放。每個線程都有自己的變量實例。只有聲明thread_local的變量才具有這個存儲持續時間。
我認爲引入這種關鍵字的通過引入在C語言的標準存儲器模型成爲可能++ 0x中:
whoa,答案看起來與3分鐘前完全不同。 –
@Mooing:現在確實如此。 – Nawaz
「'thread_local'是在C++ 03中添加的一個新的存儲持續時間說明符」:這是什麼廢話? –
該關鍵字被稱爲thread_local
。這意味着每個線程都有自己的那個變量版本。
否,但它確實不表示「與該變量有關的任何內容都將使用新線程執行」。這意味着每個存在的線程都會有一個變量副本,每個線程只能看到它自己的變量副本。
在C++ 0x/11中沒有關鍵字叫做__thread。 –
從the Wikipedia article on "Thread-local storage":
線程本地存儲(TLS)是使用 靜態或全局內存線程局部計算機編程方法。
這有時需要的,因爲通常在過程的所有線程 共享相同的地址空間,這是不希望有時。
和:
的C++ 0x引入了
thread_local
關鍵字。除此之外的是,各種C++ 編譯器實現提供具體的方式來聲明線程局部 變量:的Sun Studio C/C++,IBM XL C/C++,GNU C和Intel C/C++(Linux系統)使用的語法:
__thread int number;
的Visual C++,英特爾C/C++(Windows系統),用Borland C++ Builder和數字火星C++使用語法:
__declspec(thread) int number;
的Borland C++ Builder還支持語法:
int __thread number;
所以,雖然__thread
確實在實踐中存在,在某些系統上,thread_local
是新的,正式的,C++ 0x中的關鍵字,做同樣的事情。
只要您有權訪問C++ 0x,就可以使用非標準__thread
。
你從哪裏讀到的? –