歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux平台上用C++實現多線程互斥鎖

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

日期:2017/3/1 10:46:51   编辑:Linux編程

在上篇用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. #include <pthread.h>
  4. //鎖接口類
  5. class ILock
  6. {
  7. public:
  8. virtual ~ILock() {}
  9. virtual void Lock() const = 0;
  10. virtual void Unlock() const = 0;
  11. };
  12. //互斥鎖類
  13. class CMutex : public ILock
  14. {
  15. public:
  16. CMutex();
  17. ~CMutex();
  18. virtual void Lock() const;
  19. virtual void Unlock() const;
  20. private:
  21. mutable pthread_mutex_t m_mutex;
  22. };
  23. //鎖
  24. class CMyLock
  25. {
  26. public:
  27. CMyLock(const ILock&);
  28. ~CMyLock();
  29. private:
  30. const ILock& m_lock;
  31. };
  32. #endif

Lock.cpp

  1. #include "Lock.h"
  2. //動態方式初始化互斥鎖
  3. CMutex::CMutex()
  4. {
  5. pthread_mutex_init(&m_mutex, NULL);
  6. }
  7. //注銷互斥鎖
  8. CMutex::~CMutex()
  9. {
  10. pthread_mutex_destroy(&m_mutex);
  11. }
  12. //確保擁有互斥鎖的線程對被保護資源的獨自訪問
  13. void CMutex::Lock() const
  14. {
  15. pthread_mutex_lock(&m_mutex);
  16. }
  17. //釋放當前線程擁有的鎖,以使其它線程可以擁有互斥鎖,對被保護資源進行訪問
  18. void CMutex::Unlock() const
  19. {
  20. pthread_mutex_unlock(&m_mutex);
  21. }
  22. //利用C++特性,進行自動加鎖
  23. CMyLock::CMyLock(const ILock& m) : m_lock(m)
  24. {
  25. m_lock.Lock();
  26. }
  27. //利用C++特性,進行自動解鎖
  28. CMyLock::~CMyLock()
  29. {
  30. m_lock.Unlock();
  31. }
Copyright © Linux教程網 All Rights Reserved