Linux Posix執行緒條件變數

2021-09-07 08:28:38 字數 1496 閱讀 5252

生產者消費者模型

1.多個執行緒操作全域性變數n,需要做成臨界區(要加鎖--執行緒鎖或者訊號量)

2.呼叫函式pthread_cond_wait(&g_cond,&g_mutex)讓這個執行緒鎖在某乙個條件上等待

--pthread_cond_wait()函式的本質是①:拿到鎖的執行緒,把鎖暫時丟掉(解鎖)②:執行緒休眠,進行等待③:執行緒等待通知,醒來繼續執行(重新獲得鎖)

--這個pthread_cond_wait()函式是乙個原子性操作

--注意:丟掉的鎖可以被生產線程獲得,也可以被消費執行緒獲得,消費者執行緒獲取會陷入等待,生產者執行緒獲得會傳送訊號,喚醒消費者

3.pthread_cond_signal()生產者拿到鎖,生產n,生產完成後,傳送訊號給消費者(喚醒消費者),生產者離開臨界區

//

生產者消費者模型

#include #include

#include

#include

#include

#include

//定義執行緒鎖

pthread_mutex_t mutex =pthread_mutex_initializer;

//定義執行緒條件鎖

pthread_cond_t cond =pthread_cond_initializer;

//定義全域性變數

int g_num = 0;//

定義消費者執行緒數量

#define consume_count 2

//定義生產者執行緒數量

#define product_count 4

//消費者執行緒

void *consume_run(void *arg)

//表示已經有資源了,可以消費了

printf("

消費者%d開始消費!\n

", tnum);

g_num--;

//解鎖

pthread_mutex_unlock(&mutex);

sleep(3);

}return

null;}//

生產者執行緒

void *product_run(void *arg)

else

pthread_mutex_unlock(&mutex);

sleep(2);

}return

null;

}int main(int arg, char *args)

}for (i = 0; i < product_count; i++)

}//join

for (i = 0; i < consume_count + product_count; i++)

}printf(

"程序推出了!\n");

return0;

}

linux Posix執行緒同步 條件變數 例項

條件變數 condtion variable 是在多執行緒程式中用來實現 等待 喚醒 邏輯常用的方法。舉個簡單的例子,應用程式a中包含兩個執行緒t1和t2。t1需要在bool變數test cond為true時才能繼續執行,而test cond的值是由t2來改變的,這種情況下,如何來寫程式呢?可供選擇...

python 執行緒條件

條件 事件 訊號量本質上都是鎖,不常用 常用方法 obj,acquire obj.release obj.wait 建立是阻塞狀態,等待obj.notify 並且前後要有obj.acquire 和obj.release obj.notify num 前後要有obj.acquire 和obj.rele...

POSIX執行緒 條件變數

條件變數是 posix 執行緒結構,可以讓您在遇到某些條件時 喚醒 執行緒。可以將它們看作是一種執行緒安全的訊號傳送。如果執行緒正在等待某個特定條件發生,它應該如何處理這種情況?它可以重複對互斥物件鎖定和解鎖,每次都會檢查共享資料結構,以查詢某個值。但這是在浪費時間和資源,而且這種繁忙查詢的效率非常...