线程特定数据的小程序。
2011-08-18 22:27
155 查看
thread-specific data是为了解决一个线程想用全局变量来实现某个目的却因为多个线程之间不能很好的共享全局变量(这里里面牵涉到同步问题,because multiple threads cannot use the buffer to hold different things at the same time .)。我还有一点没想明白,同一个进程的线程之间是如何共享数据的?不适用thread-specific data ?好像thread-specific data又说“这种方式可以较好的实现一个线程使用唯一的(别的线程都不知道的)全局变量,这
这个程序中,函数A和函数B共享了一个 内存区,而这个内存区是特定于调用A和B线程的。对于其他线程,这个内存区是不可见的,这就安全有效的达到了线程中的各个函数之间共享数据的目的。
哦,终于看明白了,共享数据是对于线程中的各个函数而言的。不是对于不同线程间而言的。不同线程间共享数据是不是用的thread-specific data这个方式的。
#include <pthread.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #define LEN 100 pthread_key_t key; void A(char *s){ char *str = (char *) pthread_getspecific(key); printf("Address:%d", pthread_getspecific(key)); strncpy(str, s, LEN); } void B( ){ char *str = (char *) pthread_getspecific(key); printf("Address:%d", pthread_getspecific(key)); printf("%s\n", str); } void destructor( void *ptr){ free(ptr); printf("memory freed\n"); } void *threadfunc1(void *pvoid){ pthread_setspecific(key, malloc(LEN)); A("Thread1"); B(); } void *threadfunc2(void *pvoid){ pthread_setspecific(key, malloc(LEN)); A("Thread2"); B(); } int main() { pthread_t tid1, tid2; pthread_key_create(&key, destructor); pthread_create(&tid1, NULL, &threadfunc1, NULL); pthread_create(&tid2, NULL, &threadfunc2, NULL); pthread_exit(NULL); return 0; }
这个程序中,函数A和函数B共享了一个 内存区,而这个内存区是特定于调用A和B线程的。对于其他线程,这个内存区是不可见的,这就安全有效的达到了线程中的各个函数之间共享数据的目的。
哦,终于看明白了,共享数据是对于线程中的各个函数而言的。不是对于不同线程间而言的。不同线程间共享数据是不是用的thread-specific data这个方式的。
相关文章推荐
- Linux多线程实践(4) --线程特定数据
- 线程特定数据
- 线程特定数据函数的使用
- 线程特定数据
- 线程的基本属性(分离,栈大小,保护区,竞争,调度并发)以及TSD特定数据
- APUE读书笔记-12线程控制-06线程特定数据
- Linux多线程实践(4) --线程特定数据
- winform程序两个窗体间同步数据(三):建立父窗口与子窗口的父子关系(不使用线程)
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- 编写一个生产者,消费者多线程程序,一个线程随机产生数据,另一个线程显示所产生的数据.
- 线程特定数据(学习)
- 线程特定数据 Thread Specified Data
- linux网络编程之posix 线程(二):线程的属性和 线程特定数据 Thread-specific Data
- 线程特定数据详解
- Linux多线程编程(三)——线程特定数据
- 线程特定数据
- Linux多线程实践(四 )线程的特定数据
- 线程的属性和 线程特定数据 Thread-specific Data
- 多线程学习--案例--多线程中数据共享--设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序
- 线程特定数据详解