Linux環境程式設計之同步 二 條件變數

2021-09-06 21:04:32 字數 1567 閱讀 2949

相互排斥鎖用於上鎖,條件變數則用於等待。條件變數是型別為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...