Linux 进程互斥量
来源:互联网 发布:mac xquartz 编辑:程序博客网 时间:2024/04/30 12:37
分类: 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 进程互斥量
- Linux--进程--僵尸进程
- linux 进程
- linux 进程
- Linux 进程
- Linux进程
- LINUX进程
- Linux进程
- Linux进程
- Linux进程
- linux进程
- Linux进程
- 进程-Linux
- linux-进程
- Linux进程
- linux 进程
- linux进程
- gawk的使用方法
- 网关服务器 .
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- 使用非递归与递归来判断回文
- 闪客工具 收集一下网上有意思的方法
- Linux 进程互斥量
- play framework2学习之旅<2.5>Body parsers
- 精妙绝伦的jQuery——改进导航:菜单、标签及折叠选项
- [Unresolved Problems]
- 一个简单的游戏服务器框架 .
- 《望岳》赏析
- 《绝句》赏析
- 涂料化工行业:ORACLE EBS R12的解决方案经验总结(OPM项目)
- 《锄禾》赏析