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

📄 mysem_linux.c

📁 提供了rbtree ttree avltree list hashtable等常用容器的算法,代码经过uclinux + arm44b0平台验证
💻 C
字号:
/*
*
*mysem_linux.c 信号量 lin shao chuan
*
*/
#include "mysem.h"

#include <semaphore.h>
#include <errno.h>

#include "mylog.h"


typedef struct __mysem_t_
{
	sem_t sem;
	
	HMYMEMPOOL hm;
}mysem_t;


/*
*
*创建信号量
*
*/
HMYSEM MySemConstruct(HMYMEMPOOL hm, int value)
{
	int ret = 0;
	mysem_t * ms = (mysem_t *)MyMemPoolMalloc(hm, sizeof(*ms));
	if(NULL == ms)
		return NULL;

	ret = sem_init(&ms->sem, 0, value);
	ms->hm = hm;

	if(0 != ret)
	{
		LOG_WARN(("fail create semaphore"));

		MyMemPoolFree(hm, ms);
		return NULL;
	}

	return (HMYSEM)ms;
}

/*
*
*销毁信号量
*
*/
void MySemDestruct(HMYSEM hsem)
{
	mysem_t * ms = (mysem_t *)hsem;
	if(NULL == ms)
		return;

	while(EAGAIN == sem_trywait(&ms->sem))
		sem_post(&ms->sem);

	sem_destroy(&ms->sem);
	
	MyMemPoolFree(ms->hm, ms);
}

/*
*
*增加信号量
*
*/
void MySemInCrease(HMYSEM hsem)
{
	mysem_t * ms = (mysem_t *)hsem;
	if(NULL == ms)
		return;

	sem_post(&ms->sem);
}

/*
*
*减少信号量
*
*/
void MySemDeCrease(HMYSEM hsem)
{
	mysem_t * ms = (mysem_t *)hsem;
	if(NULL == ms)
		return;

	sem_wait(&ms->sem);
}














⌨️ 快捷键说明

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