C++标准的一些特性记录:C++11的thread_local
文章目录
- thread_local
thread_local
在多线程的编程环境里,一般来说,所有的线程都是共享同一个内存空间,也就是说如果定义一个变量,这个变量是被所有线程共享的,所以多个变量在访问同一个变量时,是需要加锁机制的,否则就会出现问题。
在C++11中,引入了一个关键字thread_local,如果有这个关键字修饰变量的话,编译器会将这个变量自动给每个线程都复制一份。这样就不需要进行加锁了。
我们用两端代码来对比一下,同时在代码中将变量地址输出,就可以看到是不是复制了一份了。
如下代码:
#include <iostream>
#include <thread>
#include <unistd.h>// Declare a thread-local variable
int counter = 0;void incrementCounter() {// Increment the counter for this threadfor(int i=0;i<10;i++){counter++;std::cout << "Thread ID: " << std::this_thread::get_id() &