muduo原始碼筆記 base Mutex

2021-10-04 02:53:04 字數 1989 閱讀 2373

mutexlock類是對互斥量的封裝,使用棧上物件mutexlockguard來管理mutex的加鎖與釋放。棧上物件在退出對應的**段之後會自動釋放,隨之,鎖也會被自動釋放。使用方法如下:

class

foo;

int foo::

size()

const

mutex.h的部分原始碼如下所示:

class

capability

("mutex"

) mutexlock : noncopyable

// 析構函式中銷毀mutex變數

~mutexlock()

// 判斷加鎖的物件是否是當前執行緒

bool

islockedbythisthread()

const

void

assertlocked()

const

assert_capability

(this

)// 加鎖

void

lock()

acquire()

// 釋放鎖

void

unlock()

release()

pthread_mutex_t*

getpthreadmutex()

/* non-const */

private

:friend

class

condition

;class

unassignguard

: noncopyable ~

unassignguard()

private

: mutexlock& owner_;};

void

unassignholder()

void

assignholder()

pthread_mutex_t mutex_;

// 互斥量

pid_t holder_;

// 持有鎖的執行緒id};

// 管理mutex加鎖與釋放的類(並不負責初始化與銷毀)

class

scoped_capability mutexlockguard : noncopyable

// 釋放物件是釋放鎖

~mutexlockguard()

release()

private

: mutexlock& mutex_;

};

condition類是對條件變數的封裝,使用到了mutexlock類

class

condition

: noncopyable

// 條件變數的銷毀

~condition()

// 如果為滿足條件,需要等待

// 首先將鎖的持有者設定為0

// 然後對等待條件變數

// 當等待結束時,會自動把鎖的持有者設定為當前現場

void

wait()

// returns true if time out, false otherwise.

bool

waitforseconds

(double seconds)

;// 喚醒等待條件的某個執行緒

void

notify()

// 喚醒等待條件的所有執行緒

void

notifyall()

private

: mutexlock& mutex_;

// 互斥量

pthread_cond_t pcond_;

// 條件變數};

// 等待 seconds 秒

bool muduo::condition::

waitforseconds

(double seconds)

muduo原始碼筆記 base Timestamp

timestamp表示的是utc時間,最小可表示微秒 us 資料成員microsecondssinceepoch 使用int64 t long long 表示物件,因此作者建議將此值按值傳遞,這樣可以直接存放在暫存器中,提高訪問速度。ifndef muduo base timestamp h def...

muduo原始碼筆記 base Atomic

atomic是對整數 int 原子性操作的乙個封裝。使用了gcc原子性操作,效率比普通加鎖要高。這裡主要是使用了三個函式 1 原子自增操作 將 ptr加上value,並返回 ptr原來的值 type sync fetch and add type ptr,type value 2 原子和比較操作 如...

讀Muduo原始碼筆記 1

物件銷毀時出現的競態條件 執行緒安全的類 簡單的執行緒安全類 class counter int value const int getandincrease private int value mutable mutexlock mutex int counter value const int ...