生產者與消費者模型(執行緒)

2021-07-25 15:36:02 字數 2125 閱讀 7766

#include

#include

#include

#include

#include

#include

#define queue_size  100

#define ok            0   

#define error        -1    

typedef int datatype;

typedef struct

seqqueue;

struct msg

;struct msg goods;

pthread_mutex_t mutex;

// 置空佇列

int initqueue(seqqueue *q)

q->rear = 0;

q->front = 0;

return ok;

}// 判斷是否空隊

int queueempty(seqqueue *q)

return q->rear == q->front;

}// 判斷是否隊滿

int queuefull(seqqueue *q)

return (q->rear+1)%queue_size == q->front;

}// 入隊

int enqueue(seqqueue *q, int data)

if (queuefull(q))

q->rear = (q->rear+1) % queue_size;

q->data[q->rear] = data;

return ok;

}// 出隊

int dequeue(seqqueue *q)

if (queueempty(q))

q->front = (q->front+1) % queue_size;

return q->data[q->front];

}// 獲取隊頭元素

int getfront(seqqueue *q)

if (queueempty(q))

int pos = (q->front+1) % queue_size;

return q->data[pos];

}void delay()

k1--;}}

// 生產一條訊息

int produce_item()

// 將訊息放入緩衝區

void insert_item(int item)

// 將訊息取出緩衝區

int remove_item()

// 處理訊息

void consumer_item(int item)

// 生產者執行緒函式

void *produce(void *arg)

}// 消費者執行緒函式

void *consume(void *arg)

}int init()

// 初始化訊號量

sem_init(&goods.empty, 0, 100);

sem_init(&goods.full, 0, 0);

//初始化鎖

pthread_mutex_init(&mutex, null);

}void destroy()

int main()

// 建立生產者執行緒

int i;

for (i = 0; i < 5; i++)

}// 建立消費者執行緒

ret = pthread_create(&consumeid, null, consume, null);

if (ret != 0)

// 等待生產者執行緒結束

for (i = 0; i < 5; i++)

}// 等待消費者執行緒結束

ret = pthread_join(consumeid, null);

if (0 != ret)

// 釋放銷毀相關資源

destroy();

return 0;

執行結果:

心得體會:

創立這個生產者與消費者模型。

執行緒,生產者消費者模型

什麼是執行緒 1.執行緒是cpu最小的執行單位 2.程序是資源單位 3.如果將作業系統比作工廠的話,程序是車間,執行緒是流水線,而cpu為電源 開啟乙個程序預設有乙個執行緒即主線程 執行緒的兩種開啟方式 例項化thread類 自定義mythread類,繼承thread類,覆蓋run方法 什麼時候需要...

生產者與消費者模型

先介紹幾個函式 生產消費者模型 二者共享資料value,這裡,生產者是producter,消費者是consumer。生產者負責放物品到value中,消費者使用wait 等待生產者的通知。當得到通知後,消費者取出物品,並且用notify 通知生產者,可以再放下一批物品。例項 package cn.ed...

生產者與消費者模型

如圖 一共有三種關係 生產者與生產者的互斥關係,消費者與消費者的互斥關係,生產者與消費者的互斥且同步關係。兩種角色 生產者 執行緒 與消費者 執行緒 乙個交易場所 倉庫 一段記憶體空間,且可存可取 二 基於單向鍊錶的生產者消費者模型 1 我們這裡用乙個單鏈表當做那段共享記憶體,簡單實現生產者消費者模...