在上篇用C++實現了Win32平台上的多線程互斥鎖( http://www.linuxidc.com/Linux/2011-12/49713.htm ),這次寫個Linux平台上的,同樣參考了開源項目C++ Sockets的代碼,在此對這些給開源項目做出貢獻的斗士們表示感謝!
下邊分別是互斥鎖類和測試代碼,已經在Fedora 13虛擬機上測試通過。
Lock.h
- #ifndef _Lock_H
- #define _Lock_H
-
- #include <pthread.h>
-
- //鎖接口類
- class ILock
- {
- public:
- virtual ~ILock() {}
-
- virtual void Lock() const = 0;
- virtual void Unlock() const = 0;
- };
-
- //互斥鎖類
- class CMutex : public ILock
- {
- public:
- CMutex();
- ~CMutex();
-
- virtual void Lock() const;
- virtual void Unlock() const;
-
- private:
- mutable pthread_mutex_t m_mutex;
- };
-
- //鎖
- class CMyLock
- {
- public:
- CMyLock(const ILock&);
- ~CMyLock();
-
- private:
- const ILock& m_lock;
- };
-
-
- #endif
Lock.cpp
- #include "Lock.h"
-
-
- //動態方式初始化互斥鎖
- CMutex::CMutex()
- {
- pthread_mutex_init(&m_mutex, NULL);
- }
-
- //注銷互斥鎖
- CMutex::~CMutex()
- {
- pthread_mutex_destroy(&m_mutex);
- }
-
- //確保擁有互斥鎖的線程對被保護資源的獨自訪問
- void CMutex::Lock() const
- {
- pthread_mutex_lock(&m_mutex);
- }
-
- //釋放當前線程擁有的鎖,以使其它線程可以擁有互斥鎖,對被保護資源進行訪問
- void CMutex::Unlock() const
- {
- pthread_mutex_unlock(&m_mutex);
- }
-
- //利用C++特性,進行自動加鎖
- CMyLock::CMyLock(const ILock& m) : m_lock(m)
- {
- m_lock.Lock();
- }
-
- //利用C++特性,進行自動解鎖
- CMyLock::~CMyLock()
- {
- m_lock.Unlock();
- }