muduo原始碼解析5 mutex相關類

2022-08-23 18:06:08 字數 2000 閱讀 6083

class

mutexlock: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...