在 C++ 中,可以使用 thread_local
關鍵字來聲明一個線程局部變量。Lambda 表達式可以被當做一個函數對象,因此可以在 lambda 中使用線程局部變量。下面是一個簡單的例子:
#include <iostream>
#include <thread>
int main() {
thread_local int threadLocalVar = 0;
std::thread t1([&](){
threadLocalVar = 10;
std::cout << "Thread 1: threadLocalVar = " << threadLocalVar << std::endl;
});
std::thread t2([&](){
threadLocalVar = 20;
std::cout << "Thread 2: threadLocalVar = " << threadLocalVar << std::endl;
});
t1.join();
t2.join();
std::cout << "Main thread: threadLocalVar = " << threadLocalVar << std::endl;
return 0;
}
在這個例子中,我們聲明了一個 thread_local
的整型變量 threadLocalVar
,然后在兩個線程中分別對這個變量賦值并輸出。在 lambda 表達式中,我們使用 [&]
指定捕獲所有外部變量,以便在 lambda 中使用 threadLocalVar
變量。
注意:C++11 引入了 thread_local
關鍵字,因此在編譯時需要使用 -std=c++11
或更高版本的標準。