Linux线程私有数据
2015-02-27 18:30
288 查看
最近做的一个项目中,有这么个需求,系统中使用多线程技术,每个线程访问redis,希望每个线程来保存对redis的一份长链接,而不是每个请求建立一次链接。如果在线程启动之前建立好链接,然后传到线程的私有数据中,可以实现。可是系统的框架封装的实现,无法传入数据,这时可以采用线程的私有数据技术进行储存和获取。
其中,有三个关键的系统API可供调用,分别是:
1、pthread_key_create ,创建一个key,各个线程可以用这个key去读数据和写数据。
2、存储数据,采用pthread_setspecific
3、获取数据,采用pthread_getspecific
这里转载一个网友给出来的示例:http://blog.csdn.net/lmh12506/article/details/8452700
其中,有三个关键的系统API可供调用,分别是:
1、pthread_key_create ,创建一个key,各个线程可以用这个key去读数据和写数据。
2、存储数据,采用pthread_setspecific
3、获取数据,采用pthread_getspecific
这里转载一个网友给出来的示例:http://blog.csdn.net/lmh12506/article/details/8452700
#include <malloc.h> #include <pthread.h> #include <stdio.h> /* The key used to associate a log file pointer with each thread. */ static pthread_key_t thread_log_key; /* Write MESSAGE to the log file for the current thread. */ void write_to_thread_log (const char* message) { FILE* thread_log = (FILE*) pthread_getspecific (thread_log_key); fprintf (thread_log, “%s\n”, message); } /* Close the log file pointer THREAD_LOG. */ void close_thread_log (void* thread_log) { fclose ((FILE*) thread_log); } void* thread_function (void* args) { char thread_log_filename[20]; FILE* thread_log; /* Generate the filename for this thread’s log file. */ sprintf (thread_log_filename, “thread%d.log”, (int) pthread_self ()); /* Open the log file. */ thread_log = fopen (thread_log_filename, “w”); /* Store the file pointer in thread-specific data under thread_log_key. */ pthread_setspecific (thread_log_key, thread_log); write_to_thread_log (“Thread starting.”); /* Do work here... */ return NULL; } int main () { int i; pthread_t threads[5]; /* Create a key to associate thread log file pointers in thread-specific data. Use close_thread_log to clean up the file pointers. */ pthread_key_create (&thread_log_key, close_thread_log); /* Create threads to do the work. */ for (i = 0; i < 5; ++i) pthread_create (&(threads[i]), NULL, thread_function, NULL); /* Wait for all threads to finish. */ for (i = 0; i < 5; ++i) pthread_join (threads[i], NULL); return 0; }
相关文章推荐
- unix/linux下线程私有数据实现原理及使用方法
- unix/linux下线程私有数据实现原理及使用方法
- ZT linux 线程私有数据之 一键多值技术
- linux线程的私有数据
- [GNU/Linux] Linux系统调用-线程相关(三):私有数据
- linux线程私有数据的保护
- linux线程私有数据---TSD池
- [转] unix/linux下线程私有数据实现原理及使用方法
- unix/linux下线程私有数据实现原理及使用方法
- linux多线程学习笔记六--一次性初始化和线程私有数据
- Linux高级程序设计----线程与私有数据
- Linux——线程信号量 读写锁 线程的私有数据
- 【Linux系统编程】线程私有数据
- linux线程私有数据详解
- linux下C语言多线程(二)线程的私有数据
- [Linux线程]使用线程的私有数据
- linux线程的私有数据
- linux线程之线程私有数据 pthread_key_create方法的学习
- unix/linux下线程私有数据实现原理及使用方法
- linux 线程私有数据之一键多值技术TSD池