C++關(guān)鍵字thread_local學(xué)習(xí)筆記
"thread_local" 關(guān)鍵字
"thread_local"是C++11引入的關(guān)鍵字,用于指定變量為線程本地存儲。它可以讓每個線程都擁有自己獨立的變量副本,從而避免多線程并發(fā)訪問帶來的問題。
具體來說,當(dāng)在多個線程中訪問同一個thread_local變量時,每個線程都會得到自己獨立的變量副本,互不干擾。
例如,我們可以使用"thread_local"定義一個全局變量:
#include <iostream> #include <thread> using namespace std; thread_local int num = 0; void foo() { num++; cout << "Thread " << this_thread::get_id() << ": " << num << endl; } int main() { thread t1(foo); thread t2(foo); t1.join(); t2.join(); return 0; }
在上述代碼中,我們定義了一個名為"num"的全局變量,通過"thread_local"關(guān)鍵字將其定義為線程本地變量。
在函數(shù)"foo"中,每個線程都對其進(jìn)行自增,并輸出當(dāng)前"num"的值以及執(zhí)行線程的ID。
注意, 編譯程序時要鏈接pthread庫, 編譯命令要加上 -ptheadd
參數(shù), 以確保編譯正常進(jìn)行. 否則會報錯
"undefined reference to pthread_create "g++ -std=c++17 -pthread thread_local.cpp -o ./thread_local
運行程序后,我們可以看到如下輸出:
Thread 139915771846912: 1
Thread 139915763454208: 1
可以看出,雖然兩個線程都對"num"進(jìn)行了自增操作,但它們各自擁有獨立的變量副本,因此互不干擾。
在涉及多線程的代碼中, 使用"thread_local"關(guān)鍵字可以讓我們在多線程中安全、高效地使用全局變量,減少并發(fā)沖突的概率,更好地利用多核處理器的性能。
以上就是C++ thread_local關(guān)鍵字學(xué)習(xí)筆記的詳細(xì)內(nèi)容,更多關(guān)于C++ thread_local關(guān)鍵字的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c++之移動構(gòu)造函數(shù)或者移動賦值運算符的作用詳解
文章介紹了移動構(gòu)造函數(shù)和移動賦值運算符的核心作用,它們通過資源管理權(quán)轉(zhuǎn)移的方式實現(xiàn)對象的構(gòu)造,減少內(nèi)存拷貝的開銷,移動構(gòu)造函數(shù)的參數(shù)一定是一個右值引用2025-03-03typedef_struct與struct之間的區(qū)別
本篇文章主要是對typedef struct與struct之間的區(qū)別進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12C語言 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組模擬實現(xiàn)順序表流程詳解
順序表,全名順序存儲結(jié)構(gòu),是線性表的一種,線性表用于存儲邏輯關(guān)系為“一對一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對數(shù)據(jù)的物理存儲結(jié)構(gòu)也有要求,跟隨下文來具體了解吧2021-11-11