Muduo庫原始碼分析(5) 互斥鎖,條件變數類

2021-08-04 16:04:40 字數 1370 閱讀 3324

互斥鎖(muduo庫簡單的封裝)

將muduo庫的執行緒id的操作去除的簡單版本

// 出錯處理

#define mcheck(ret) ()

class mutexlock : noncopyable

~mutexlock()

void

lock()

void unlock()

pthread_mutex_t* getpthreadmutex()

private:

pthread_mutex_t mutex_;// 互斥鎖

};// 對加鎖和解鎖操作進行封裝,採用的是c++的raii機制,好處是不需要手動進行解鎖操作,由mutexlockguard類自動管理解鎖操作(析構函式完成)。

class mutexlockguard : noncopyable

~mutexlockguard()

private:

mutexlock& mutex_;// 採用的是引用,目的是該類只負責加鎖和解鎖,而互斥量的銷毀由mutexlock類負責

};// 阻止匿名互斥量的操作

#define mutexlockguard(x) error "missing guard object name"

條件變數類封裝

class condition : noncopyable

~condition()

void wait()

void notify()

void notifyall()

bool waitforseconds(double seconds)

private:

mutexlock& mutex_;// 互斥量

pthread_cond_t pcond_;// 條件變數

};

countdownlatch類:

可實現子程序等待主程序發起命令後競爭執行

(主線程呼叫countdown,子執行緒呼叫wait)

也可實現主線程等待子程序初始化完成後在執行

(主線程呼叫wait,子執行緒呼叫countdown)

class countdownlatch : noncopyable

} void countdown()

}int getcount() const

private:

mutable mutexlock mutex_;// 宣告為mutable的目的是因為getcount函式宣告為const函式而該函式會改變鎖的狀態

condition condition_;

int count_;

};

muduo 原始碼分析(前言0)

前言0 個人高效能 高併發linux伺服器端程式設計 網路程式設計 比較感興趣,自己寫過一些簡單的tcp通訊程式,用程序池實現簡單cgi伺服器,用執行緒池實現簡單web伺服器。熟悉c 程式語言,但是沒有用c 參與過乙個專案,所以想尋找乙個開源專案,用c 自己實現乙個相對完整的網路庫,所以選擇了mud...

muduo庫原始碼學習 base Logfile

本檔案使用的是c 17版本 ifndef muduo base logfile h define muduo base logfile h include include include namespace muduo class logfile noncopyable 檔案日誌類 endif mu...

Muduo原始碼分析(2) 原子類

如果 ptr oldval,就將newval寫入 ptr,然後返回 ptr 否則直接返回 ptr sync val compare and swap type ptr,type oldval type newval,返回修改前的值 sync fetch and add type ptr,type v...