C++ 的 thread_local
是一個存儲類說明符,它用于聲明一個線程局部變量。這意味著這個變量在每個線程中都有一個獨立的實例,每個線程都可以訪問和修改自己的實例,而不會影響其他線程中的實例。這在多線程編程中非常有用,因為它可以避免數據競爭和同步問題。
下面是一個簡單的例子來說明如何使用 thread_local
:
#include <iostream>
#include <thread>
thread_local int x = 0; // 聲明一個線程局部變量 x
void increment() {
x += 1; // 每個線程都會增加自己的 x 值
std::cout << "Thread id: " << std::this_thread::get_id() << ", x: "<< x << std::endl;
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
return 0;
}
在這個例子中,我們創建了兩個線程 t1
和 t2
,它們都執行 increment
函數。由于 x
是一個線程局部變量,因此每個線程都有自己的 x
實例。當每個線程增加自己的 x
值時,它不會影響其他線程中的 x
值。因此,輸出結果將顯示每個線程的 x
值都是 1。
需要注意的是,thread_local
變量的初始化可能會在不同的線程中多次執行,因此應確保初始化操作是線程安全的。