C++11新特性:thread_local

thread_local是C++11 引入的关键字,用于声明线程局部存储变量。

每个线程都有自己独立的变量实例,而不是共享同一个实例,每个线程可以维护自己的状态,而不会相互干扰。

例:使用thread_local实现线程特定的计数器

#include 
#include 
#include 
// 定义线程局部存储变量
thread_local int threadSpecificCounter = 0;
// 共享资源
int sharedResource = 0;
// 一个函数,每个线程都会调用,递增线程局部计数器,并更新共享资源
void threadFunction(int threadId) {
    // 递增线程局部计数器
    threadSpecificCounter++;
    // 模拟一些计算工作
    for (int i = 0; i < 100000; ++i) {
        sharedResource++;
    }
    // 输出线程局部计数器和共享资源
    std::cout << "Thread " << threadId << ": Thread-local counter = " << threadSpecificCounter << ", Shared resource = " << sharedResource << std::endl;
}

int main() {
    const int numThreads = 3;
    std::vector threads;

    for (int i = 0; i < numThreads; ++i) {
        threads.emplace_back(threadFunction, i + 1);
    }

    for (auto &thread : threads) {
        thread.join();
    }

    std::cout << "Final shared resource value: " << sharedResource << std::endl;

    return 0;
}

threadSpecificCounter是线程局部存储的变量,每个线程都有自己的拷贝,每个线程都会递增它,并模拟一些计算工作,同时更新共享资源sharedResource。

通过使用 thread_local , 每个线程都可以独立地操作它们自己的计数器,而不会相互影响。

你可能感兴趣的:(c++,c++,算法,开发语言)