怎么使用c++11thread实现__thread
时间: 2023-08-13 19:02:36 浏览: 176
在C++11中,可以使用`thread_local`关键字来实现线程局部存储。`thread_local`可以用于修饰变量或者对象,表示这个变量或者对象是线程局部的,每个线程都有一份独立的副本,互不干扰。
下面是一个使用`thread_local`实现线程局部存储的示例代码:
```c++
#include <iostream>
#include <thread>
thread_local int i = 0; // 声明线程局部变量i
void foo()
{
i++; // 修改线程局部变量i
std::cout << "i in foo: " << i << std::endl; // 输出线程局部变量i的值
}
int main()
{
std::thread t1(foo); // 创建线程t1
std::thread t2(foo); // 创建线程t2
t1.join(); // 等待线程t1执行完毕
t2.join(); // 等待线程t2执行完毕
return 0;
}
```
在上面的代码中,我们使用`thread_local`声明了一个线程局部变量`i`,然后在`foo`函数中修改了`i`的值,并输出了`i`的值。我们创建了两个线程`t1`和`t2`,它们都会调用`foo`函数。由于`i`是线程局部的,所以`t1`和`t2`之间的`i`是互相独立的,互不干扰。
当我们运行上面的代码时,可能会得到如下输出:
```
i in foo: 1
i in foo: 1
```
这说明`t1`和`t2`都有一份`i`的副本,并且它们互不干扰。
阅读全文