條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作:乙個執行緒等待 「 條件變數的條件成立」 而掛起,另乙個執行緒使 「條件成立 」(給出條件成立訊號),為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。
下面這個例子展示的是互斥鎖和條件變數的結合使用,以及取消對於條件等待動作的影響,例子中有兩個執行緒被啟動,並等待同乙個條件變數。
#include#include#includepthread_mutex_t mutex; // 互斥量
pthread_cond_t cond; // 條件變數
void* child1( void* param )
pthread_cleanup_pop( 0 );
return ( void* )0;
}void* child2( void* param )
return ( void* )0;
}int main()
while( 1 );
sleep( 100 );
pthread_exit( 0 );
return 0;
}
// pthread_cond_wait會先解除之前的pthread_mutex_lock鎖定的mutex,然後阻塞在等待佇列裡休眠,直到再次被喚醒(大多數情況下是等待的條件成立而被喚醒,喚醒後,該程序會先鎖定先pthread_mutex_lock(&mutex);,再讀取資源
// 編譯
kennie@cbib:~/pthreaddir$ g++ -lpthread -o mutex_con.out mutex_con.cpp
// 執行結果
hello, condition variable test
thread 1 get running
thread 1 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
thread 2 get running
thread 2 pthread_mutex_lock returns 0
......
Linux多執行緒程式設計 執行緒互斥鎖
通過下面的練習加深對執行緒的概念的理解,同時明確執行緒的控制。從而進一步了解執行緒的互斥,並學會利用pthread庫。定義乙個用於互斥的互斥鎖 和乙個主函式和兩個子執行緒都能訪問的共享變數,乙個主函式和兩個用來建立子執行緒的子函式 在主函式中定義兩個子執行緒id的變數,初始化互斥鎖,建立對應函式的子...
多執行緒程式設計 互斥鎖
多執行緒程式設計 互斥鎖 1 引言 互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。可以保證以下三點 1 原子性 把乙個互斥量鎖定為乙個原子操作,這意味著作業系統 或pthread函式庫 保證了如果乙個執行緒鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥...
linux多執行緒程式設計之互斥鎖
執行緒的同步問題 乙個程序中的多個執行緒是共享同一段資源的,由於執行緒對資源的競爭引出了鎖。其中mutex是一種簡單的加鎖方法,這個互斥鎖只有兩種狀態,那就是上鎖和解 鎖,可以把互斥鎖看作是某種意義上的全域性變數。在某一時刻,只能有乙個執行緒取得這個互斥上的鎖,擁有上鎖狀態的執行緒可以對共享資源進行...