⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mymutex_linux.c

📁 sourceforge历史版本完整下载: http://sourceforge.net/project/showfiles.php?group_id=202044 提供了基于b树索引算法的文件数据数据
💻 C
字号:
/*
*
*mymutex_linux.c 互斥锁 lin shao chuan
*
*/


#include "mymutex.h"

#include <pthread.h>

#include "mylog.h"


typedef struct __mymutex_t_
{
	pthread_mutex_t mtx;

	HMYMEMPOOL hm;
}mymutex_t;


/*
*
*创建互斥锁
*
*/
HMYMUTEX MyMutexConstruct(HMYMEMPOOL hm)
{
	int ret = 0;
	mymutex_t * mt = (mymutex_t *)MyMemPoolMalloc(hm, sizeof(*mt));
	if(NULL == mt)
		return NULL;

	mt->hm = hm;
	ret = pthread_mutex_init(&mt->mtx, NULL);
	if(0 != ret)
	{
		LOG_WARN(("fail create mutex"));

		MyMemPoolFree(hm, mt);
		return NULL;
	}

	return (HMYMUTEX)mt;
}

/*
*
*锁毁互斥锁
*
*/
void MyMutexDestruct(HMYMUTEX hmx)
{
	mymutex_t * mt = (mymutex_t *)hmx;
	if(NULL == mt)
		return;

	if(0 != pthread_mutex_trylock(&mt->mtx))
		pthread_mutex_unlock(&mt->mtx);

	pthread_mutex_destroy(&mt->mtx);

	MyMemPoolFree(mt->hm, mt);
}

/*
*
*加锁 0:成功, 非0:失败
*
*/
int MyMutexLock(HMYMUTEX hmx)
{
	mymutex_t * mt = (mymutex_t *)hmx;
	if(NULL == mt)
		return -1;

	return pthread_mutex_lock(&mt->mtx);
}

int MyMutexTryLock(HMYMUTEX hmx)
{
	mymutex_t * mt = (mymutex_t *)hmx;
	if(NULL == mt)
		return -1;

	return pthread_mutex_trylock(&mt->mtx);
}

/*
*
*解锁
*
*/
int MyMutexUnLock(HMYMUTEX hmx)
{
	mymutex_t * mt = (mymutex_t *)hmx;
	if(NULL == mt)
		return -1;

	return pthread_mutex_unlock(&mt->mtx);
}




















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -