std::thread_local
时间: 2023-08-23 07:14:58 浏览: 198
书中的 std::thread
引用[1]中的代码展示了如何在多线程中使用std::thread_local关键字来创建线程本地变量。std::thread_local关键字用于修饰变量,使得每个线程都拥有自己的变量副本。在引用[1]的代码中,thread_local int i=0;声明了一个线程本地变量i,并且在每个线程中都有自己的副本。在函数f中,通过i=newval;可以修改当前线程的i的值。在函数g中,通过std::cout<<i;可以输出当前线程的i的值。在main函数中,创建了三个线程t1、t2、t3,并分别传入不同的参数调用threadfunc函数。每个线程都会执行f(id)和g()函数,并输出对应的i的值。最后,通过std::cout<<i<<std::endl;输出主线程的i的值。
引用[2]中的代码展示了另一个使用std::thread_local的例子。在这个例子中,Cls_A类被声明为线程本地变量x。每个线程都有自己的Cls_A对象。在func_0函数中,通过x.add()可以修改当前线程的x对象的数据,并通过std::cout输出当前线程的x对象的数据。在main函数中,创建了两个线程t1和t2,并分别调用func_0函数。每个线程都会输出自己的x对象的数据。
引用[3]中的代码也展示了使用std::thread_local关键字的例子。在这个例子中,通过thread_local int x = 1;声明了一个线程本地变量x,并且每个线程都有自己的副本。在func函数中,通过循环修改当前线程的x的值,并输出当前线程的x的值。在main函数中,创建了两个线程t1和t2,并分别调用func函数。每个线程都会输出自己的x的值。
综上所述,std::thread_local关键字用于创建线程本地变量,使得每个线程都有自己的变量副本。这样可以在多线程环境下独立地操作和修改变量,而不会相互干扰。
阅读全文