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