admin 管理员组

文章数量: 1184232


2024年1月18日发(作者:vfp的activex控件是什么)

__thread 用法

__thread 是 C/C++ 语言中的一个关键字,它用于定义线程本地存储(Thread Local Storage,TLS)。线程本地存储是指每个线程都有一份独立的变量,线程之间互不干扰,对该变量的访问速度比全局变量更快,因此 __thread 适用于一些需要频繁使用变量的场景。下面我们分步骤来阐述 __thread 的用法。

步骤一:定义 __thread 变量

__thread 关键字需要放在变量声明的位置,如下所示:

```c++

__thread int var;

```

上述代码定义了一个 __thread 变量 var,它是整型的。在每个线程中,var 都有自己独立的副本,互不干扰。

步骤二:使用 __thread 变量

__thread 变量的使用方式和普通变量一样,但是要注意以下几点:

一、__thread 变量只能用于线程函数和全局变量中,不能用于局部变量。

二、__thread 变量的初始化只能在定义时进行,不能在函数中进行。

三、__thread 变量的作用域是整个线程,不能跨线程访问。

下面是一个简单的示例:

```c++

#include

#include

__thread int var; // 定义一个 __thread 变量 var

void* thread_func(void* arg)

{

var = 5; // 给 __thread 变量 var 赋值为 5

printf("线程 ID:%ld,var:%dn", pthread_self(), var);

return NULL;

}

int main()

{

pthread_t tid1, tid2;

var = 10; // 给全局变量 var 赋值为 10

pthread_create(&tid1, NULL, thread_func, NULL);

pthread_create(&tid2, NULL, thread_func, NULL);

pthread_join(tid1, NULL);

pthread_join(tid2, NULL);

printf("main 函数中 var:%dn", var); // 输出全局变量 var

的值

return 0;

}

```

上述代码中,我们定义了一个 __thread 变量 var,并在两个线程中对其赋予不同的值,然后输出其值。在主函数中,我们还对全局变量 var 进行了赋值。运行程序,输出如下:

```

线程 ID:144,var:5

线程 ID:140,var:5

main 函数中 var:10

```

可以看到,每个线程中的 var 变量都有自己独立的值,而全局变量 var 的值在所有线程中保持不变。

总结

__thread 关键字可以帮助我们在不同的线程中创建独立的变量,方便我们进行多线程编程。但是需要注意的是,__thread 变量只能用于线程函数和全局变量中,不能用于局部变量。在使用 __thread 时,务必注意线程之间的变量互不干扰。


本文标签: 变量 线程 用于