这个技术主要解决多线程时,每个线程拥有自己独立的变量。
例如正常情况下,多线程共享变量
#include <iostream>
#include <thread>
static int counter = 0; // Shared across all threads
void increment_counter() {
counter++;
std::cout << "Thread ID: " << std::this_thread::get_id()
<< ", Counter: " << counter << std::endl;
}
int main() {
std::thread t1(increment_counter);
std::thread t2(increment_counter);
t1.join();
t2.join();
return 0;
}
结果
Thread ID: 140735680792320, Counter: 1
Thread ID: 140735672399616, Counter: 2
如果采用TLS技术,那么再count的最前面添加thread_local( c++11)或 __thread (GCC/Clang)
#include <iostream>
#include <thread>
thread_local static int counter = 0; // Each thread has its own copy
void increment_counter() {
counter++;
std::cout << "Thread ID: " << std::this_thread::get_id()
<< ", Counter: " << counter << std::endl;
}
int main() {
std::thread t1(increment_counter);
std::thread t2(increment_counter);
t1.join();
t2.join();
return 0;
}
结果:
Thread ID: 140735680792320, Counter: 1
Thread ID: 140735672399616, Counter: 1