C++關(guān)鍵字thread_local學(xué)習(xí)筆記
"thread_local" 關(guān)鍵字
"thread_local"是C++11引入的關(guān)鍵字,用于指定變量為線程本地存儲(chǔ)。它可以讓每個(gè)線程都擁有自己獨(dú)立的變量副本,從而避免多線程并發(fā)訪問帶來的問題。
具體來說,當(dāng)在多個(gè)線程中訪問同一個(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"的全局變量,通過"thread_local"關(guān)鍵字將其定義為線程本地變量。
在函數(shù)"foo"中,每個(gè)線程都對(duì)其進(jìn)行自增,并輸出當(dāng)前"num"的值以及執(zhí)行線程的ID。
注意, 編譯程序時(shí)要鏈接pthread庫, 編譯命令要加上 -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)算符的核心作用,它們通過資源管理權(quán)轉(zhuǎn)移的方式實(shí)現(xiàn)對(duì)象的構(gòu)造,減少內(nèi)存拷貝的開銷,移動(dòng)構(gòu)造函數(shù)的參數(shù)一定是一個(gè)右值引用2025-03-03
typedef_struct與struct之間的區(qū)別
本篇文章主要是對(duì)typedef struct與struct之間的區(qū)別進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
C語言動(dòng)態(tài)內(nèi)存函數(shù)詳解
這篇文章主要介紹了C語言動(dòng)態(tài)內(nèi)存函數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09
C語言 數(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)也有要求,跟隨下文來具體了解吧2021-11-11

