多线程之pthread_once和pthread_key

本文介绍了多线程编程中的pthread_once和pthread_key。pthread_once确保初始化代码仅执行一次,防止多线程重复初始化。pthread_key则用于创建线程私有数据,每个线程可以独立保存数据。在初始化过程中,通常结合pthread_once使用,通过pthread_setspecific和pthread_getspecific函数来操作线程特定的数据。
摘要由CSDN通过智能技术生成

pthread_once
避免多个线程将其运行多次,一般用于多个线程之间只初始化一次的部分。
需要包含头文件<pthread.h>
函数原型为:

int pthread_once(pthread_once_t *once_control,void (*init_routine)(void));
pthread_once_t once_control = PTHREAD_ONCE_INIT; 

pthread_key:
在多线程中设置一个数据块,使得每个线程在这个数据块上独立的保存自己的一份数据。类似于线程私有数据。
就好像对于公有数据块贴上多个标签,每个线程对应一个标签,而每个标签下的值是独立的。
此处在它初始化的过程中应该搭配pthread_once使用,使得pthread_key多个线程只初始化一次
而后在每个线程中,可以使用pthread_setspecific和pthread_getspecific对公有数据块进行操作,可以将其绑定到任意类型上,其函数原型是:

void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *value);

我做了一个小测试,测试代码为:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值