mutex和condition的用法

2021-07-03 18:49:46 字數 1167 閱讀 2025

分享一下用到的mutex和condition用法。

mutex一般有兩種使用情況,一種是單獨使用,保護臨界區。

一種是和condition配合使用,可以等待某condition拿到之後再向下走。

condition 有兩種signal形式, single和  broadcast,下面例子是signal的,

做個參考。

pthread_cond_t ake_cond  = pthread_cond_initializer;

pthread_mutex_t ake_mutex = pthread_mutex_initializer;

thread 1: 

等待ake

完成的signal

pthread_mutex_lock(&ake_mutex);

if (ake_state_got_exchange_key !=dtcp_ake_get_current_state())

int result = pthread_cond_timedwait(&(pmpthread->m_cond), &mutex, &outtime);

if (result == etimedout)

pthread_mutex_unlock(&mutex);

pthread_condattr_init(&m_attr);

pthread_condattr_setclock(&m_attr, clock_monotonic);

pthread_cond_init(&m_cond, &m_attr);

clock_realtime

代表機器上可以理解為當前的我們所常看的時間,其當time-of-day 被修改的時候而改變,這包括ntp對它的修改(ntp:network time protocol(ntp)是用來使計算機時間同步化的一種協議,它可以使計算機對其伺服器或時鐘源(如石英鐘,gps等等)做同步化,它可以提供高精準度的時間校正(lan上與標準間差小於1毫秒,wan上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議攻擊。)

clock_monotonic

代表從過去某個固定的時間點開始的絕對的逝去時間,它不受任何系統time-of-day時鐘修改的影響,如果你想計算出在一台計算機上不受重啟的影響,兩個事件發生的間隔時間的話,那麼它將是最好的選擇。

redis中condition和unless的區別

1.註解的condition和unless的區別,condition對傳入值生效,unless對結果result生效,使用了錯誤的result導致報空錯誤 2.key鍵生成策略,不能再key中直接呼叫工具類的方法,將方法寫在同乙個類下,使用 root.target.methodname p0.att...

Lock和Condition物件的使用

condition的await 方法 void await throws interruptedexception導致當前執行緒等到發訊號或interrupted 在所有情況下,在此方法返回之前,當前執行緒必須重新獲取與此條件相關的鎖。當執行緒返回時,它保證保持此鎖。實現兩個執行緒交替執行的案例 c...

併發程式設計 Condition

condition實現對執行緒的等待 喚醒。等待和喚醒的方法的呼叫需要在lock.lock 與lock.unlock 之間,在阻塞的過程中會釋放同步狀態。與wait方式不同的是,它額外支援響應中斷 截止時間 deadline 等待。與notify隨機喚醒執行緒方式不同的是,condition支援特定...