先把條件變數函式甩出來,
//等待條件
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restric mutex);
1:把呼叫執行緒放到所等待條件的執行緒列表上
2:對傳進來已經加過鎖的互斥量解鎖
3:執行緒進入休眠狀態等待被喚醒注:1
、2步為原子操作
//通知條件
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t * cond);
1:通知指定條件已經滿足
2:等待執行緒重新鎖定互斥鎖
3:等待執行緒需要重新測試條件是否滿足
#include #include #include using namespace std;
pthread_mutex_t g_mutex;
pthread_cond_t g_cond;
static int num = 0;
void* thread1(void* id);
void* thread2(void* id);
int main(int argc,char* argv)
cout<< "exit process from main func" << endl;
return 0;
}void* thread1(void* id)
cout<< "thread 1 : " << num << endl;
++num;
if(num > 10000)
pthread_cond_broadcast(&g_cond);
pthread_mutex_unlock(&g_mutex);
} }void* thread2(void* id)
if(num > 10000)
cout<< "thread 2 : " << num << endl;
++num;
pthread_cond_broadcast(&g_cond);
pthread_mutex_unlock(&g_mutex);
} }
使用執行緒順序列印數字
實現思路 要順序列印數字,首先要保證列印處於同步的語句塊中,這個可以用synchronized實現 其次,可以採用執行緒順序來保證數字順序,在for迴圈中開啟執行緒,可以保證執行緒是有序的。package com.xicheng.bigdata author liubin52 date 2018 1...
3個執行緒順序列印數字
問題 啟動3個執行緒a b c,使a列印0,然後b列印1,然後c列印2,a列印3,b列印4,c列印5,依次類推。思路 每個執行緒給定乙個編號,每個執行緒判斷當前是否已經輪到自己列印 如果沒輪到,就wait等待 如果輪到,則列印當前數字,並喚醒其他執行緒。判斷是否已經輪到自己列印 每個執行緒給定乙個編...
C 條件變數實現多執行緒順序列印
最近在學習多執行緒的網路程式設計,互斥量和條件變數是多執行緒程式設計中常用的執行緒同步方式。在編寫自己的高併發伺服器的過程中對互斥量和條件變數進行了封裝,想要測試一下自己封裝的類是否正確,能否通過自己封裝的條件變數類順利實現多執行緒順序列印。先來簡單的看一下條件變數的常用介面 int pthread...