📄 commonmutex.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 + -