pthread_key_t和pthread_key_create()详解

pthread_key_t 是一个POSIX线程库中定义的数据类型,用于表示线程特定数据(Thread Specific Data,简称TSD)的键。线程特定数据使得多个线程可以独立地访问同一个全局变量,每个线程对这个全局变量的修改不会影响其他线程。

pthread_key_create() 函数用于创建一个新的线程特定数据键。函数原型如下:

c代码
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));

参数说明:

  • pthread_key_t *key:指向一个pthread_key_t类型的指针,用于存储新创建的键。
  • void (*destructor)(void*):一个函数指针,当线程退出时,将调用这个函数来释放与键关联的数据。如果不需要释放任何数据,可以设置为NULL

返回值:成功时返回0,失败时返回一个错误码。

当创建一个线程特定数据键成功后,可以使用pthread_setspecific()函数为键设置一个与线程关联的值,使用pthread_getspecific()函数获取与线程关联的值。当线程退出时,如果为键提供了析构函数,将调用这个析构函数来释放与线程关联的数据。

下面是一个使用pthread_key_tpthread_key_create()的简单示例:

c代码
#include <stdio.h>#include <stdlib.h>#include <pthread.h>pthread_key_t key;void destructor(void *value) { printf("Destructor called for value: %d\n", *((int *) value)); free(value); }void *thread_func(void *arg) { int *value = malloc(sizeof(int)); *value = (int)(size_t)arg; pthread_setspecific(key, value); printf("Thread %d sets value: %d\n", *value, *value); return NULL; }int main() { pthread_t threads[3]; // 创建线程特定数据键 pthread_key_create(&key, destructor); for (int i = 0; i < 3; i++) { pthread_create(&threads[i], NULL, thread_func, (void *)(size_t)i); } for (int i = 0; i < 3; i++) { pthread_join(threads[i], NULL); } // 删除线程特定数据键 pthread_key_delete(key); return 0; }

在这个示例中,我们创建了一个线程特定数据键,并为每个线程设置了一个与线程关联的值。当线程退出时,将调用destructor函数来释放分配的内存。

pthread create()

www.0574web.net 宁波海美seo网络优化公司 是网页设计制作,网站优化,企业关键词排名,网络营销知识和开发爱好者的一站式目的地,提供丰富的信息、资源和工具来帮助用户创建令人惊叹的实用网站。 该平台致力于提供实用、相关和最新的内容,这使其成为初学者和经验丰富的专业人士的宝贵资源。

点赞(11) 打赏

声明本文内容来自网络,若涉及侵权,请联系我们删除! 投稿需知:请以word形式发送至邮箱18067275213@163.com

评论列表 共有 3 条评论

Quentin 1年前 回复TA

提交了sitemap,网站的收录的数量减少了。但不是很多。

A 1年前 回复TA

百度快照排名是否真正存在百度人工干预? 这个问题以往几年也经常有站长在讨论,而今年在圈子中还有不少站长在讨论这个问题,经很多站长在实战过程中,得出结论是百度官方为竞价推广,采用人工干预百度快照排名。但根据百度官方的说法是这样的说法是不存在的。当然我也为了写了一篇题为《百度自然搜索排名是否存在人工干预?》一文,也是论述了关于人工干预是不存在的。但是很大一部分站长却不这样认为。请站长老师带问下百度官方这样的情况。

现实理想 1年前 回复TA

跟着百度转,真不是滋味啊

立即
投稿
发表
评论
返回
顶部