生產者 消費者問題學習筆記

2021-06-22 06:34:50 字數 1903 閱讀 7602

問題描述:有乙個或多個生產者生產出某種型別的資料,並將其放置在快取區中;有乙個消費者從快取區中取資料,每次取一項;在任何時刻只有乙個消費者或者生產者可以訪問快取區;當快取區已滿時,生產者不會繼續向其中新增資料;當快取區為空時,消費者不會從中移走資料。

(1)使用二元訊號量解決無限緩衝區生產者/消費者問題

int n; //緩衝區的資料數量

binary_semaphore s=1,delay=0;  //s用於表示每次只有乙個生產者或者消費者進入緩衝區;delay用於當緩衝區為空時讓消費則等待

void producer()

}

void consumer()

}

void main()

(2)使用訊號量解決無限緩衝區生產者/消費者問題

semaphore n=0,s=1;

void producer()

}

void consumer()

}

void main()

(3)使用訊號量解決有限緩衝區生產者/消費者問題

const int sizeofbuffer=緩衝區大小;

semaphore s=1.n=0,e=sizeofbuffer; // e表示緩衝區的空餘空間

void producer()

}

void consumer()

}

int main()

(4)利用管程解決有限緩衝區生產者/消費者問題

monitor boundedbuffer;

char buffer[n];

int nextin,nextout;

int count;

cond notfull,notempty; // 條件變數

void take(char x)

生產者/消費者呼叫管程

void producer()

}

void consumer()

}

int main()

生產者 消費者問題筆記

生產者之間是互斥的,也即同時只能有乙個生產者進行生產 消費者之間是互斥的,也即同時只能有乙個消費者進行消費 生產者消費者之間是互斥的,也即生產者消費者不能同時進行生產和消費 容器滿時,生產者進行等待 容器空是,消費者進行等待 object的synchronized wait notifyall 實現...

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...