开发者

C++关键字thread_local学习笔记

开发者 https://www.devze.com 2023-11-20 14:18 出处:网络 作者: Totn
"thread_local" 关键字 "thread_local"是C++11引zOkVMHS入的关键字,用于指定变量为线程本地存储。它可以让每个线程都拥有自己独立的变量副本,从而避免多线程并发访问带来的问题。

"thread_local" 关键字

"thread_local"是C++11引zOkVMHS入的关键字,用于指定变量为线程本地存储。它可以让每个线程都拥有自己独立的变量副本,从而避免多线程并发访问带来的问题。

具体来说,当在多个线程中访问同一个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() {
  zOkVMHS  thread t1(foo);
    thread t2(foo);
    t1.joiwww.devze.comn();
    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

可以看出,虽然两个线程都对"nujsm"进行了自增操作,但它们各自拥有独立的变量副本,因此互不干扰。

在涉及多线程的代码中, 使用"thread_local"关键字可以让我们在多线程中安全、高效地使用全局变量,减少并发冲突的概率,更好地利用多核处理器的性能。

以上就是C++ thread_local关键字学习笔记的详细内容,更多关于Cwww.devze.com++ thread_local关键字的资料请关注编程客栈(www.devze.com)其它相关文章!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号