ntdef.cpp

来自「此程序适用于电力系统中的网关程序」· C++ 代码 · 共 112 行

CPP
112
字号
#include "ntdef.h"

/*====================================================================================
*                                                                                    
* Subroutine  : sem_init()                                                         
*                                                                                    
* Parameters  : 
*				 sem:   逻辑锁
*				 pshare:暂时没用
*				 value:
*                                                                                    
* Called from : 		                                                          
* 
* Description : 初始化逻辑锁
* 
* Return	   :  
*                                             
* Modification: 
*				 2003-07-10: 
*                                                                                     
*====================================================================================*/
int sem_init(sem_t *sem,int pshared,unsigned int value)
{
	sem->count = value;

	sem->hdl =  CreateSemaphore(NULL,value,value,NULL);

	if( sem->hdl ) 
	{
		return 0;
	}
	
	return  1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : sem_destroy()                                                         
*                                                                                    
* Parameters  : 
*				 sem:   逻辑锁
*                                                                                    
* Called from : 		                                                          
* 
* Description : 关闭逻辑锁
* 
* Return	   :  
*                                             
* Modification: 
*				 2003-07-10: 
*                                                                                     
*====================================================================================*/
int sem_destroy( sem_t *sem)
{
	CloseHandle( sem->hdl);
	return 0;
}

int sem_wait(sem_t *sem)
{
	WaitForSingleObject(sem->hdl,INFINITE);
	sem->count --;
	return 0;
}

int sem_post(sem_t *sem)
{
	sem->count ++;
	ReleaseSemaphore(sem->hdl,1,NULL);
	return 0;
}

int sem_getvalue(sem_t *sem,int *val)
{
	
	WaitForSingleObject(sem->hdl,INFINITE);
	*val = (int) sem->count;
	ReleaseSemaphore(sem->hdl,1,NULL);
	
	return 0;
} 
int pthread_rwlock_init(pthread_rwlock_t  *rwptr,
						const pthread_rwlocatt_t *attr)
{
	sem_init(&rwptr->sem,0,1);
	return 0;
}

int pthread_rwlock_destroy(pthread_rwlock_t  *rwptr)
{
	sem_destroy(&rwptr->sem);
	return 0;
}


int pthread_rwlock_rdlock(pthread_rwlock_t  *rwptr)
{
	sem_wait(&rwptr->sem);
	return 0;
}

int pthread_rwlock_wrlock(pthread_rwlock_t  *rwptr)
{
	sem_wait(&rwptr->sem);
	return 0;
}

int pthread_rwlock_unlock(pthread_rwlock_t  *rwptr)
{
	sem_post(&rwptr->sem);
	return 0;
}

⌨️ 快捷键说明

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