`
fanrey
  • 浏览: 252730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POSIX线程私有数据

 
阅读更多
在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
分享到:
评论

相关推荐

    POSIX多线程程序设计

    然后讨论了, 一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问, 题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过的实例, 来解释实际的概念,并包括...

    POSIX多线程程序设计.pdf

    然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads...

    POSIX多线程程序设计中文版

    一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问 题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大量注释过的实例 来解释实际的概念,并包括Pthreads

    Posix线程编程指南

    详细讲述Posix线程库API,线程的创建与取消,线程的私有数据,线程同步

    POSIX多线程设计

    本书深入描述了 IEEE人开放系统接口标准 POSIX 线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步...然后讨论了一些高级话题,包括属性对象,线程私有数据和实时调试。

    Posix_线程编程指南

    Posix_线程编程指南,包括线程创建,取消,私有数据,同步,终止等方面

    Posix线程编程指南.rar

    线程私有数据 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等待和激发 ...

    linux多线程编程

    九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13 四、线程的调度策略 13 五、线程的调度参数 14 六、线程的作用域 16 七、线程堆栈的大小 17 八、线程堆栈...

    第3章_linux多线程编程

    2、线程包含了表示进程内执行环境必须的信息,包括线程ID、一组寄存器、栈、调度优先级、策略、信号屏蔽字、errno变量、线程私有数据。 3、测试是否支持POSIX线程: 使用编译测试宏_POSIX_THREADS 调用sysconf,运行...

    linux系统下多线程编程文档资料

    九、线程的私有数据 9 第二章 线程高级知识 11 一.线程属性 11 二、线程的分离状态 12 三、线程的继承性 13 四、线程的调度策略 13 五、线程的调度参数 14 六、线程的作用域 16 七、线程堆栈的大小 17 八、线程堆栈...

    UNIX多线程学习笔记

    UNIX多线程学习笔记.docx 第一节 概述 第二节 线程 第三节 互斥锁 第四节 条件变量 第五节 线程的私有数据 第六节 Posix有名信号灯 第七节 共享内存

    UNIX环境高级编程_第二版中文

    12.6 线程私有数据  12.7 取消选项  12.8 线程和信号  12.9 线程和fork  12.10 线程和I/O  12.11 小结  习题  第13章 守护进程  13.1 引言  13.2 守护进程的特征  13.3 编程规则  13.4 出错...

    UNIX环境高级编程(第二版中文)

    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...

    unix环境编程电子书

    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 第...

    UNIX环境高级编程

    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...

    UNIX环境高级编程_第2版.part1

    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 ...

    UNIX环境高级编程_第2版.part2

    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 ...

Global site tag (gtag.js) - Google Analytics