linux中利用互斥量对数据结构进行保护的源代码

本文介绍了一个用于线程安全的数据结构实现方法,通过C语言中的互斥量(pthread_mutex_t)确保多线程环境下对结构体成员变量count的安全访问。文中详细解释了如何在创建结构体实例时初始化互斥量,以及如何通过互斥访问来增加或减少引用计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdlib.h>     /*malloc函数调用*/
#include <pthread.h>    /*线程的互斥量的系统调用*/ 


struct foo{					/*为了对一个数据结构的互斥访问*/
	int		count;			/*便于利用互斥量*/
	pthread_mutex_t	mutex;			/*用count的目的是,用于记录目前所有线程对该结构对象的引用数量*/
	/*other struction*/			/*防止在仍有线程作用于该结构对象等待拿锁,就释放了内存*/
};


struct foo *					/*这个函数的作用是分配一个对象,并且对该对象进行了初始化工作*/
foo_alloc(void)					/*而不是仅仅做一个对象的初始化工作,所以其参数是void而非一个对象*/
{						
	struct foo *fp;				
	if((fp=malloc(sizeof(struct foo)))!=NULL);
	{
		fp->count = 1;			/*count等于1,而且不需要加锁,因为是刚刚建立*/
		if(pthread_mutex_init(&fp->mutex,NULL)!=0)
		{
			free(fp);              /*如果互斥量初始化失败需要对已经分配对象进行释放内存再返回*/
			return(NULL);		/*否则将会造成内存泄露*/
		}
		/*initilize other parts*/
	}
	return (fp);				/*把return放在这个部分,即使分配对象失败也不用担心*/
}


void
mutex_hold(struct foo *fp)			/*在访问count时要加锁,而在引用一个对象时要调用该函数*/
{
	pthread_mutex_lock(&fp->mutex);
	fp->count++;
	pthread_mutex_unlock(&fp->mutex);
}


void
mutex_rele(struct foo *fp)			/*访问完一个对象后,要调用该函数*/
{
	pthread_mutex_lock(&fp->mutex);		/*这个锁的作用是对lock与unlock之间的资源进行互斥访问*/
	if(--fp->count==0){
		pthread_mutex_destroy(&fp->mutex);
		free(fp);
	}else {
		pthread_mutex_unlock(&fp->mutex);
	}
}

总结:互斥量的作用就是对pthread_mutex_lock和pthread_mutex_unlock间的资源进行互斥访问。
    这个数据结构中之所以有互斥量,目的是对该结构对象的一些操作代码可能需要互斥的使用。

参考文献:《UNIX环境高级编程》第二版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值