在JAVA中是使用ThreadLocal来实现线程特定数据。POSIX中操作线程私有数据的主要通过以下4个函数来实现:pthread_key_create(创建一个键),pthread_setspecific(为一个键设置线程私有数据),pthread_getspecific(从一个键读取线程私有数据),pthread_key_delete(删除一个键)。这几个函数的声明如下:
#include <pthread.h>
int pthread_key_create(pthread_key_t *key,void (*destr_function)(void *));
int pthread_setspecific(pthread_key_t key,const void *pointer));
void *pthread_getspecific(pthread_key_t key);
int pthread_key_delete(pthread_key_t key);
测试代码:
//pthread_data2.c
#include <stdio.h>
#include <string.h>
#include <pthread.h>
pthread_key_t key;
void * mythread(void* arg){
int tsd = *(int*)arg;
printf("thread %d is running\n",pthread_self());
pthread_setspecific(key,(void *)tsd);
int i = 0;
for(i=0; i<5; i++){
printf("thread %d returns %d\n",pthread_self(),pthread_getspecific(key));
sleep(1);
}
}
int main(void){
pthread_t thid1;
pthread_t thid2;
printf("main thread begins running\n");
pthread_key_create(&key,NULL);
int i = 100;
pthread_create(&thid1,NULL,mythread,&i);
int j = 200;
pthread_create(&thid2,NULL,mythread,&j);
sleep(5);
pthread_key_delete(key);
printf("main thread exit\n");
return 0;
}
编译:gcc -o pthread_data2 pthread_data2.c -l pthread
运行:
./pthread_data2
main thread begins running
thread -1216165008 is running
thread -1216165008 returns 100
thread -1224557712 is running
thread -1224557712 returns 200
thread -1216165008 returns 100
thread -1224557712 returns 200
thread -1224557712 returns 200
thread -1216165008 returns 100
thread -1224557712 returns 200
thread -1216165008 returns 100
thread -1224557712 returns 200
thread -1216165008 returns 100
main thread exit
分享到:
相关推荐
然后讨论了, 一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问, 题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过的实例, 来解释实际的概念,并包括...
然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads...
一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问 题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过的实例 来解释实际的概念,并包括Pthreads
详细讲述Posix线程库API,线程的创建与取消,线程的私有数据,线程同步
本书深入描述了 IEEE人开放系统接口标准 POSIX 线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步...然后讨论了一些高级话题,包括属性对象,线程私有数据和实时调试。
Posix_线程编程指南,包括线程创建,取消,私有数据,同步,终止等方面
线程私有数据 3.1概念及作用 3.2创建和注销 4.线程同步 4.1互斥锁 4.1.1 创建和销毁 4.1.2互斥锁属性 4.1.3锁操作 4.1.4其他 4.2条件变量 4.2.1创建和注销 4.2.2等待和激发 ...
九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13 四、线程的调度策略 13 五、线程的调度参数 14 六、线程的作用域 16 七、线程堆栈的大小 17 八、线程堆栈...
2、线程包含了表示进程内执行环境必须的信息,包括线程ID、一组寄存器、栈、调度优先级、策略、信号屏蔽字、errno变量、线程私有数据。 3、测试是否支持POSIX线程: 使用编译测试宏_POSIX_THREADS 调用sysconf,运行...
九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13 四、线程的调度策略 13 五、线程的调度参数 14 六、线程的作用域 16 七、线程堆栈的大小 17 八、线程堆栈...
UNIX多线程学习笔记.docx 第一节 概述 第二节 线程 第三节 互斥锁 第四节 条件变量 第五节 线程的私有数据 第六节 Posix有名信号灯 第七节 共享内存
12.6 线程私有数据 12.7 取消选项 12.8 线程和信号 12.9 线程和fork 12.10 线程和I/O 12.11 小结 习题 第13章 守护进程 13.1 引言 13.2 守护进程的特征 13.3 编程规则 13.4 出错...
12.6 线程私有数据 328 12.7 取消选项 331 12.8 线程和信号 333 12.9 线程和fork 336 12.10 线程和I/O 339 12.11 小结 340 习题 340 第13章 守护进程 341 13.1 引言 341 13.2 守护进程的特征 341...
313 12.3 线程属性 314 12.4 同步属性 318 12.5 重入 324 12.6 线程私有数据 328 12.7 取消选项 331 12.8 线程和信号 333 12.9 线程和fork 336 12.10 线程和I/O 339 12.11 小结 340 习题 340 第...
12.6 线程私有数据 328 12.7 取消选项 331 12.8 线程和信号 333 12.9 线程和fork 336 12.10 线程和I/O 339 12.11 小结 340 习题 340 第13章 守护进程 341 13.1 引言 341 13.2 守护进程的特征 341...
12.6 线程私有数据328 12.7 取消选项331 12.8 线程和信号333 12.9 线程和fork 336 12.10 线程和i/o 339 12.11 小结340 习题340 第13章守护进程341 13.1 引言341 13.2 守护进程的特征341 13.3 编程规则342 ...
12.6 线程私有数据328 12.7 取消选项331 12.8 线程和信号333 12.9 线程和fork 336 12.10 线程和i/o 339 12.11 小结340 习题340 第13章守护进程341 13.1 引言341 13.2 守护进程的特征341 13.3 编程规则342 ...