歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux平台上用C++實現多線程互斥鎖

在上篇用C++實現了Win32平台上的多線程互斥鎖( http://www.linuxidc.com/Linux/2011-12/49713.htm ),這次寫個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. }   
Copyright © Linux教程網 All Rights Reserved