#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 我們這裡用乙個單鏈表當做那段共享記憶體,簡單實現生產者消費者模...