classmutexlock:noncopyable
;class
mutexlockguard:noncopyable
;
本文僅實現了最基本的mutexlock和mutexlockguard,放棄了muduo原始碼中的一大堆巨集定義,為求精簡可讀性高。
private: pthread_mutex_t m_mutex;
pid_t m_holder;
m_mutex為要操作的mutex。主要有init,destroy,lock,unlock操作。
m_holder代表當前該m_mutex被哪乙個執行緒所持有,m_holder>0表示持有該鎖的執行緒id,否則表示該鎖可用。
public: mutexlock():m_holder(0)
~mutexlock()
//該鎖是否被當前執行緒所持有
bool islockedbythisthread() const
void assertlocked() const
//加鎖後設定m_holder為當前執行緒id
void
lock
()
//解鎖前先讓當前m_holder設定為0
void
unlock()
pthread_mutex_t*getpthreadmutex()
private
: friend
class
condition;
//乙個易於分配m_holder的內部類,僅含有乙個mutexlock成員用於分配與釋放
class
unassignguard:noncopyable
~unassignguard()
private
: mutexlock&m_owner;
};//設定m_holder為當前執行緒id
void
assignholder()
//清零m_holder
void
unassignholder()
mutexlock重要就是四個操作,mutex的init,destroy,lock,unlock
有兩個資料成員pthread_mutex_t和m_holder
mutex就是上述四個操作,m_holder表示此mutex被哪乙個執行緒id所擁有,為0表示沒被擁有
lock時m_holder為持有此鎖的執行緒id,unlock時m_holder為0
還可以判斷當前mutex是否被當前執行緒給鎖住,islockedbythisthread()
private: mutexlock& m_mutex;
內部僅有乙個mutexlock變數用於簡化操作
public:
explicit mutexlockguard(mutexlock&mutex):m_mutex(mutex)
~mutexlockguard()
僅提供構造與析構函式,為了簡化對於mutexlock的操作,利用mutexlock引用傳參構造,在構造時獲得鎖,在析構時釋放鎖。
//注意mymuduo::currentthread::cachetid還沒寫實現,而且currentthread::tid()也沒有實現,在這裡僅是測試mutex相關的功能。
#include"base/mutex.h
"#include
#include
#include
mymuduo::mutexlock mutex;
namespace
mymuduo}}
long count=0
;void
workerthread1()
}int
main()
muduo原始碼解析之EventLoopThread
回到tcpserver,我們記得裡面有乙個eventloopthreadpool,根據名字,這是乙個執行緒池,它主要用於管理所有的eventloop,每個eventloop對應乙個執行緒。當新連線到來時,acceptor事件分發器將連線分發到合適的執行緒中。執行緒裡面核心是執行eventloop類裡...
muduo原始碼解析1 timestamp類
class timestamp public mymuduo copyable,public boost equality comparable,public boost less than comparable 主要是實現了時間戳的相關操作,例如時間戳的格式化,返回當前時間戳等等。private ...
muduo原始碼解析21 Socket類
封裝了乙個套接字sokcet類,內部只儲存乙個套接字檔案描述符m sockfd 提供了常用的套接字相關的操作,例如 繫結套接字,監聽,接受乙個連線,關閉寫操作,獲取tcp資訊,設定套接字為no delay模式,設定位址重用,埠重用,設定keepalive private 套接字檔案描述符,用cons...