C++关键字thread_local学习笔记
作者:Totn
这篇文章主要为大家介绍了C++关键字thread_local学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
"thread_local" 关键字
"thread_local"是C++11引入的关键字,用于指定变量为线程本地存储。它可以让每个线程都拥有自己独立的变量副本,从而避免多线程并发访问带来的问题。
具体来说,当在多个线程中访问同一个thread_local变量时,每个线程都会得到自己独立的变量副本,互不干扰。
例如,我们可以使用"thread_local"定义一个全局变量:
#include <iostream> #include <thread> using namespace std; thread_local int num = 0; void foo() { num++; cout << "Thread " << this_thread::get_id() << ": " << num << endl; } int main() { thread t1(foo); thread t2(foo); t1.join(); t2.join(); return 0; }
在上述代码中,我们定义了一个名为"num"的全局变量,通过"thread_local"关键字将其定义为线程本地变量。
在函数"foo"中,每个线程都对其进行自增,并输出当前"num"的值以及执行线程的ID。
注意, 编译程序时要链接pthread库, 编译命令要加上 -ptheadd
参数, 以确保编译正常进行. 否则会报错
"undefined reference to pthread_create "g++ -std=c++17 -pthread thread_local.cpp -o ./thread_local
运行程序后,我们可以看到如下输出:
Thread 139915771846912: 1
Thread 139915763454208: 1
可以看出,虽然两个线程都对"num"进行了自增操作,但它们各自拥有独立的变量副本,因此互不干扰。
在涉及多线程的代码中, 使用"thread_local"关键字可以让我们在多线程中安全、高效地使用全局变量,减少并发冲突的概率,更好地利用多核处理器的性能。
以上就是C++ thread_local关键字学习笔记的详细内容,更多关于C++ thread_local关键字的资料请关注脚本之家其它相关文章!