Linux线程私有数据

70 篇文章 0 订阅
16 篇文章 0 订阅

最近做的一个项目中,有这么个需求,系统中使用多线程技术,每个线程访问redis,希望每个线程来保存对redis的一份长链接,而不是每个请求建立一次链接。如果在线程启动之前建立好链接,然后传到线程的私有数据中,可以实现。可是系统的框架封装的实现,无法传入数据,这时可以采用线程的私有数据技术进行储存和获取。

其中,有三个关键的系统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;

}  




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值