Linux平台上用C++实现多线程互斥锁


在上篇用C++实现了Win32平台上的多线程互斥锁(  ),这次写个Linux平台上的,同样参考了开源项目C++ Sockets的代码,在此对这些给开源项目做出贡献的斗士们表示感谢!

下边分别是互斥锁类和测试代码,已经在Fedora 13虚拟机上测试通过。

Lock.h

  1. #ifndef _Lock_H   
  2. #define _Lock_H   
  3.   
  4. #include <pthread.h>   
  5.   
  6. //锁接口类   
  7. class ILock  
  8. {  
  9. public:  
  10.     virtual ~ILock() {}  
  11.   
  12.     virtual void Lock() const = 0;  
  13.     virtual void Unlock() const = 0;  
  14. };  
  15.   
  16. //互斥锁类   
  17. class CMutex : public ILock  
  18. {  
  19. public:  
  20.     CMutex();  
  21.     ~CMutex();  
  22.   
  23.     virtual void Lock() const;  
  24.     virtual void Unlock() const;  
  25.   
  26. private:  
  27.     mutable pthread_mutex_t m_mutex;  
  28. };  
  29.   
  30. //锁   
  31. class CMyLock  
  32. {  
  33. public:  
  34.     CMyLock(const ILock&);  
  35.     ~CMyLock();  
  36.   
  37. private:  
  38.     const ILock& m_lock;  
  39. };  
  40.   
  41.   
  42. #endif  

Lock.cpp

  1. #include "Lock.h"   
  2.   
  3.   
  4. //动态方式初始化互斥锁   
  5. CMutex::CMutex()  
  6. {  
  7.     pthread_mutex_init(&m_mutex, NULL);  
  8. }  
  9.   
  10. //注销互斥锁   
  11. CMutex::~CMutex()  
  12. {  
  13.     pthread_mutex_destroy(&m_mutex);  
  14. }  
  15.   
  16. //确保拥有互斥锁的线程对被保护资源的独自访问   
  17. void CMutex::Lock() const  
  18. {  
  19.     pthread_mutex_lock(&m_mutex);  
  20. }  
  21.   
  22. //释放当前线程拥有的锁,以使其它线程可以拥有互斥锁,对被保护资源进行访问   
  23. void CMutex::Unlock() const  
  24. {  
  25.     pthread_mutex_unlock(&m_mutex);  
  26. }  
  27.   
  28. //利用C++特性,进行自动加锁   
  29. CMyLock::CMyLock(const ILock& m) : m_lock(m)  
  30. {  
  31.     m_lock.Lock();  
  32. }  
  33.   
  34. //利用C++特性,进行自动解锁   
  35. CMyLock::~CMyLock()  
  36. {  
  37.     m_lock.Unlock();  
  38. }   
  • 1
  • 2
  • 下一页

相关内容