相互排斥鎖用於上鎖,條件變數則用於等待。條件變數是型別為pthread_cond_t的變數。一般使用例如以下函式:
#include int pthread_cond_wait(pthread_cond_t *cptr, pthread_mutex_t *mptr);
int pthread_cond_signal(pthread_cond_t *cptr);
每乙個條件變數總是有乙個相互排斥鎖與之關聯。呼叫pthread_cond_wait等待某個條件為真時,還會指定其條件變數的位址和所關聯的相互排斥鎖的位址。
使用條件變數的生產者-消費者程式例如以下:
#include #include #include #include #define maxnitems 1000000
#define maxnthreads 100
/*globals shared by threads*/
int nitems; /*read-only by producer and consumer*/
int buff[maxnitems];
structput = ;
structnready=;
int min(int a, int b)
void *produce(void *), *consume(void *);
intmain(int argc, char **argv)
nitems = min(atoi(argv[1]), maxnitems);
nthreads = min(atoi(argv[2]), maxnthreads);
/*create all producers and one consumer*/
pthread_setconcurrency(nthreads + 1);
for(i = 0; i < nthreads; i++)
pthread_create(&tid_consume, null, consume, null);
/*wait for all producers and the consumer*/
for(i = 0; i < nthreads; i++)
pthread_join(tid_consume, null);
exit(0);
}void *
produce(void *arg)
buff[put.nput] = put.nval;
put.nput++;
put.nval++;
pthread_mutex_unlock(&put.mutex);
pthread_mutex_lock(&nready.mutex);
if(nready.nready == 0)
nready.nready++;
pthread_mutex_unlock(&nready.mutex);
*((int *)arg) += 1; }}
void *
consume(void *arg)
return(null);
}
bash 指令碼程式設計之二 條件判斷
bash中如何實現條件判斷 條件判斷型別 整數判斷 雙目判斷 eq 等於 equal,測試兩個整數之間是否相等,比如 a eq b gt 大於 greater than lt 小於 lesser than ne 不等於 no equal 這裡也可以用另外一種寫法,比如 2 ne 3 可以寫作 2 e...
Linux執行緒同步機制二 條件變數cond
一 條件變數基本原理 條件變數可以使執行緒睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。二 條件變數操作...
二 條件迴圈語句
1 查詢那些既可以被7整除又可以被5整除的數字,介於1500和2700之間 1 使用列表推導式 num i for i in range 1500 2700 if i 7 0and i 5 0 print num out 1505,1540,1575,1610,1645,1680,1715,1750...