Linux 中生產者與消費者問題

2021-08-02 09:50:33 字數 1380 閱讀 5432

條件變數condition variable

乙個condition variable總是和乙個mutex搭配使用的。乙個執行緒可以呼叫pthread_cond_wait在乙個condition variable上阻塞等待,這個函式做以下三步操作:

釋放mutex(不滿足條件時必須進行休眠)

進行阻塞式等待(不能抱著鎖資源休眠)

被喚醒時能夠重新獲得mutex資源並等待(能被喚醒)

基於鍊錶的生產者消費者模型

#include

#include

#include

#include

typedef

struct _listnode

node, *plist, **pplist;

plist head = null;

static

pthread_mutex_t lock = pthread_mutex_initializer;

static

pthread_cond_t cond = pthread_cond_initializer;

plist buy_node

(int d)

tmp->next = null;

tmp->_val = d;

return tmp;

}void

init_list

(pplist list)

intis_empty

(plist list)

static

void

free_node

(plist list)

}void

push_front

(plist list, int d)

void

pop_front

(plist list, int *_out)

}void

destroy

(plist list)

free_node(list);

list = null;

}void

display

(plist head)

printf("\n");

}void *custume

() pop_front(head, &data);

//display(head);

printf("custumer custume: %d\n", data);

pthread_mutex_unlock(&lock);

pthread_cond_signal(&cond);

sleep(3);

}}void *product()}

intmain

()

c 中生產者消費者問題

乙個同步程式,生產者向乙個緩衝區 定義為三個位元組 中寫入資料,消費者從中提取數 據,如果緩衝區中沒有資料,那麼consumer只好wait,進入等待狀態,當另乙個執行緒 也就是 生產者 向緩衝區中寫入資料猴,執行了monitor.pulse,喚醒了consumer的等待,開始讀取 資料.反之,當p...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

執行緒中生產者和消費者

package com.thread.p c public class valueobject package com.thread.p c public class p public void setvalue string value system.currenttimemillis syste...