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

📄 mysem_win32.c

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


typedef struct __mysem_t_
{
	HANDLE hsem;
	
	HMYMEMPOOL hm;
}mysem_t;


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

	ms->hsem = CreateSemaphore(NULL, value, 0x7fffffff, NULL);
	ms->hm = hm;

	if(NULL == ms->hsem)
	{
		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;

	assert(ms->hsem);

	while(WAIT_TIMEOUT == WaitForSingleObject(ms->hsem, 0))
		ReleaseSemaphore(ms->hsem, 1, NULL);

	CloseHandle(ms->hsem);
	ms->hsem = NULL;

	MyMemPoolFree(ms->hm, ms);
}

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

	assert(ms->hsem);

	ReleaseSemaphore(ms->hsem, 1, NULL);
}

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

	assert(ms->hsem);

	WaitForSingleObject(ms->hsem, INFINITE);
}














⌨️ 快捷键说明

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