C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++关键字thread_local

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关键字的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文