概述
分类: Linux编程
2010-05-14 23:27
590人阅读
评论(0)
收藏
举报
网上找了下Linux进程间互斥的实现,两种方法,semaphore 和 文件锁。刚开始也尝试用semaphore来实现,但发现sem_wait和singal无法实现Windows下CirtSec,而采用了后者文件锁;
但对于读写锁来说实用文件锁实现,存在一定的不足,它分开了读写锁,而没有分开解读写锁,利用UnLock来统一解读写锁,对于这进程间读写锁的实现,还需要再进一步了解才可!
基于文件锁而实现的进程间互斥
- /*
- * File: MProcessCritSec.h
- * Author: root
- *
- * Created on 2010年5月13日, 上午4:37
- */
- #ifndef _MPROCESSCRITSEC_H
- #define _MPROCESSCRITSEC_H
- #include <fcntl.h>
- #include <string>
- using namespace std;
- class MProcessCritSec
- {
- public:
- MProcessCritSec(char *pFileName);
- virtual ~MProcessCritSec();
- public:
- /*
- * 锁
- */
- bool Lock();
- /*
- * 解锁
- */
- bool UnLock();
- /*
- * 非阻塞锁
- */
- bool TryLock(int nWaitTime = 60);
- /*
- * 判断锁的状态
- */
- bool IsLock();
- private:
- //
- flock m_lock;
- //
- int m_nLockValue;
- //
- bool m_bLocked;
- //
- string m_strFilePath;
- };
- #endif /* _MPROCESSCRITSEC_H */
- /*
- * File: MProcessCritSec.cpp
- * Author: root
- *
- * Created on 2010年5月13日, 上午4:37
- */
- #include "MProcessCritSec.h"
- #include <errno.h>
- using namespace std;
- MProcessCritSec::MProcessCritSec(char *pFileName)
- :m_bLocked(false)
- {
- m_bLocked = false;
- m_strFilePath.append("/tmp/");
- m_strFilePath.append(pFileName);
- m_nLockValue = open(m_strFilePath.c_str(), O_WRONLY|O_CREAT, 0777);
- }
- MProcessCritSec::~MProcessCritSec()
- {
- close(m_nLockValue);
- remove(m_strFilePath.c_str());
- }
- /*
- * 函数作用:锁
- * 函数参数:
- * 函数返回:
- * bool
- */
- bool MProcessCritSec::Lock()
- {
- m_lock.l_type = F_WRLCK;
- m_lock.l_whence = SEEK_SET;
- m_lock.l_start = 0;
- m_lock.l_len = 0;
- if ( fcntl(m_nLockValue, F_SETLKW, &m_lock) != 0 )
- return false;
- m_bLocked = true;
- return true;
- }
- /*
- * 函数作用:解锁
- * 函数参数:
- * 函数返回:
- * bool
- */
- bool MProcessCritSec::UnLock()
- {
- m_lock.l_type = F_UNLCK;
- m_lock.l_whence = SEEK_SET;
- m_lock.l_start = 0;
- m_lock.l_len = 0;
- if ( fcntl(m_nLockValue, F_SETLKW, &m_lock) != 0 )
- return false;
- m_bLocked = false;
- return true;
- }
- /*
- * 函数作用:尝试加锁
- * 函数参数:
- * nWaitTime : 尝试等待时间
- * 函数返回:
- * bool
- */
- bool MProcessCritSec::TryLock(int nWaitTime)
- {
- return false;
- }
- /*
- * 函数作用:判断锁的状态
- * 函数参数:
- * 函数返回:
- * bool : 锁状态
- */
- bool MProcessCritSec::IsLock()
- {
- return m_bLocked;
- }
最后
以上就是忧心小鸭子为你收集整理的Linux 进程互斥量的全部内容,希望文章能够帮你解决Linux 进程互斥量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复