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

📄 commonmutex.h

📁 为电力系统开发保护设备装置通讯的源代码 采用串口通讯, ret hat 9下 QT开发
💻 H
字号:
#ifndef _COMMONMUTEX_H_
#define _COMMONMUTEX_H_

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>

/**
 * CCommonMutex类实现了一个有更好使用特性的mutex。它除了与pthread_mutex_t的使用特性一致,
 * 可以对资源的访问进行同步保护之外,还支持同一线程上下文对同一个mutex的可重入性。即当一个
 * 线程获得了mutex以后,随后对同一个mutex的进入动作将不会被挂起,但是线程调用了多少次lock
 * 就需要调用多少次unlock才能最终释放对mutex的拥有。
 * 其中,对mutex的功能模拟使用了semaphore来实现,以避免phread_mutex_t的不可重入,同时semaphore本身
 * 是cancelation point,能够被pthread_cancel调用释放。
 */
class CCommonMutex
{
protected:
	/**
	 * 定义了一个互斥锁, 在这个类里面对其的上锁和解锁操作进行封装
	 */
	 sem_t m_Semaphore;
private:
	/**
	 * 同一线程上下文对本mutex的上锁计数
	 */
	unsigned int m_nCount ;	 
	/**
	 * 记录获得本mutex的线程的pid,用于区分同一线程上下文
	 */	
	int m_nPid ;
public:
	CCommonMutex();
	virtual ~CCommonMutex();
	
	/**
	 * 函数名称:	Lock
	 * 函数功能:	对一段代码进行上锁操作,直到解锁。如果当锁已经被别的线程持有时,
	 *		会在调用点挂起
	 * @param:
	 * @return:
	 * @see:
	 */
	void Lock();
	/**
	 * 函数名称:	tryLock
	 * 函数功能:	与Lock()类似,但是当锁已经被别的线程持有时,tryLock不会挂起,而是
	 *		立刻返回FALSE,如果锁当前没有被别的线程持有,则上锁并返回TRUE
	 * @param:
	 * @return:	TRUE表示上锁成功,FALSE上锁失败
	 * @see:
	 */
	bool tryLock();
	/**
	 * 函数名称:	Unlock
	 * 函数功能:	对一段上锁的代码进行解锁操作
	 * @param:
	 * @return:
	 * @see:
	 */
	void Unlock();
};

#endif

⌨️ 快捷键说明

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