#include class thread_lock
~thread_lock()
void lock()
void unlock()
void wait()
void signal()
private:
pthread_mutex_t m_mutex;
pthread_mutexattr_t m_mutexatr;
pthread_cond_t m_cond;
};#endif
void read()
task* ptask = m_list_task.front();
m_list_task.pop_front();
m_thread_lock.unlock();
ptask->run();
delete ptask; }}
void write(task* ptask)
剛開始使用條件變數的時候,一直都在想如果在read函式中m_thread_lock.wait()阻塞住了等待新的資料,那麼另外的寫執行緒在write中沒法m_thread_lock.lock(),那麼就沒法傳送m_thread_lock.signal(),也就是沒法觸發read縣城了,就會造成永遠阻塞的結果了。讀了多執行緒手冊才發現,pthread_cond_wait的實際作用。
執行緒呼叫pthread_cond_wait這個函式之後,核心會做下面這些事:
1. 拿到鎖的執行緒,把鎖暫時釋放;
2. 執行緒休眠,進行等待;
3. 執行緒等待通知,要醒來。(重新獲取鎖)
執行緒庫將上面三步做成了原子性操作,和linux核心繫結在一起。
linux互斥鎖和條件變數
一 互斥鎖 1.初始化 在linux下,執行緒的互斥量資料型別是pthread mutex t.在使用前,要對它進行初始化 對於靜態分配的互斥量,可以把它設定為pthread mutex initializer,或者呼叫pthread mutex init.對於動態分配的互斥量,在申請記憶體 mal...
互斥鎖和條件變數
互斥瑣 定義 指代相互排斥,最基本的同步形式。用於保護臨界區,以保證任何時刻只有乙個執行緒或乙個程序在執行其中的 上鎖 pthread mutex lock 臨界區解鎖 pthread mutex unlock 條件變數 定義 用於等待訊號,同步的另一種手段。每乙個條件變數總有乙個互斥瑣與之關聯。等...
互斥鎖和條件變數
mutex體現的是一種競爭,我離開了,通知你進來。cond體現的是一種協作,我準備好了,通知你開始吧。互斥鎖乙個明顯的缺點是它只有兩種狀態 鎖定和非鎖定。而條件變數通過允許執行緒阻塞和等待另乙個執行緒傳送訊號的方法彌補了互斥鎖的不足,它常和互斥鎖一起配合使用。使用時,條件變數被用來阻塞乙個執行緒,當...