一个简单的进程间mutex和读写锁类
来源:互联网 发布:windows模拟器 编辑:程序博客网 时间:2024/06/08 09:49
因为最近一直在做程序使用共享内存的改造,自然也就涉及到进程间同步的问题,以下是一个简单的进程间锁的例子,通过在父进程声明,然后在fork出来的子进程变可以使用这个锁的对象来进程数据访问的互斥控制。
cpp 文件
#ifndef _SHARE_LOCK_H_#define _SHARE_LOCK_H_//进程间mutex,在父进程定义,fork之后加锁解锁对父子进程间有效class ShareMutex{public:ShareMutex::ShareMutex();ShareMutex::~ShareMutex();void Lock();void UnLock();private:pthread_mutex_t* m_pMutex;};//进程间读写锁,fork之后加锁解锁对父子进程间有效class ShareRwlock{public:ShareRwlock::ShareRwlock();ShareRwlock::~ShareRwlock();void WrLock();void RdLock();void UnLock();private:pthread_rwlock_t* m_pRwlock;};#endif
cpp 文件
#include "ShareMutex.h"ShareMutex::ShareMutex(){ m_pMutex = (pthread_mutex_t *)mmap(NULL, sizeof(pthread_mutex_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); pthread_mutexattr_t attr_perf; pthread_mutexattr_init(&attr_perf)); pthread_mutexattr_setpshared(&attr_perf, PTHREAD_PROCESS_SHARED); pthread_mutex_init(g_perf_mutex, &attr_perf); }ShareMutex::~ShareMutex(){ m_pRwLocked_mutex_destroy(m_pMutex); munmap(m_pMutex, sizeof(pthread_mutex_t));}void ShareMutex::Lock(){ if(0 != pthread_mutex_lock(m_pMutex)) { throw TCException("ShareMutex::Lock() exception!"); }}void ShareMutex::UnLock(){ if(0 != pthread_mutex_unlock(m_pMutex)) { throw TCException("ShareMutex::UnLock() exception!"); }}ShareRwlock::ShareRwlock(){ m_pRwlock = (pthread_rwlock_t *)mmap(NULL, sizeof(pthread_rwlock_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); pthread_rwlockattr_t attr_pub; pthread_rwlockattr_init( &attr_pub ); pthread_rwlockattr_setpshared( &attr_pub, PTHREAD_PROCESS_SHARED ); pthread_rwlock_init( m_pRwLock, &attr_pub );}ShareRwlock::~ShareRwlock(){ pthread_rwlock_destroy(m_pRwlock); munmap(m_pRwlock, sizeof(pthread_rwlock_t));}void ShareRwlock::WrLock(){ if(0 != pthread_rwlock_wrlock( m_pRwLock )) { throw TCException("ShareRwlock::WrLock() exception!"); }}void ShareRwlock::RdLock(){ if(0 != pthread_rwlock_rdlock( m_pRwLock )) { throw TCException("ShareRwlock::RdLock() exception!"); }}void ShareRwlock::UnLock(){ if(0 != pthread_rwlock_unlock( m_pRwLock )) { throw TCException("ShareRwlock::UnLock() exception!"); }}
阅读全文
0 0
- 一个简单的进程间mutex和读写锁类
- 一个简单的进程间mutex和读写锁类
- 尝试用c11的条件变量和mutex写了一个读写锁
- 一个关于Lightweight Mutex 和 Heavyweight Mutex的实验
- 进程中锁的应用Mutex
- golang中读写锁RWMutex和通用锁Mutex的使用
- LINUX下的线程同步——mutex和读写锁
- 进程和线程的一个简单解释
- 进程和线程的一个简单解释
- 进程和线程的一个简单解释
- 一个简单的I/O读写锁
- 自己实现一个简单的读写锁
- 进程锁 process mutex ??
- Linux下用mutex和cond实现读写锁
- 讨论个问题吧,只用MUTEX,你能实现一个写者优先的读写锁吗?
- 用MUTEX实现读写锁
- Mutex的简单封装
- 一台电脑只能启动一个客户端。——Mutex 类的简单运用
- 【Python】【矩阵】协方差矩阵;特征值;特征向量
- HDU-3371 Connect the Cities
- 动态测试方法运行时间的工具BTrace的简单应用
- shell 函数 返回值
- baidu
- 一个简单的进程间mutex和读写锁类
- 【LintCode-167】链表求和(Java实现)
- 《Python学习手册》学习笔记(22)之第22章模块代码编写基础(关键词:编程语言/Python/模块/import/from)
- js数组复制的方法
- Daily Practice_Cloud Computer
- Leetcode Minimum path sum
- 设计模式-单利模式
- sizeof
- MYSQL数据库数据引擎