資源簡(jiǎn)介
參考教材中的生產(chǎn)者消費(fèi)者算法,創(chuàng)建5個(gè)進(jìn)程,其中兩個(gè)進(jìn)程為生產(chǎn)者進(jìn)程,3個(gè)進(jìn)程為消費(fèi)者進(jìn)程。一個(gè)生產(chǎn)者進(jìn)程試圖不斷地在一個(gè)緩沖中寫(xiě)入大寫(xiě)字母,另一個(gè)生產(chǎn)者進(jìn)程試圖不斷地在緩沖中寫(xiě)入小寫(xiě)字母。3個(gè)消費(fèi)者不斷地從緩沖中讀取一個(gè)字符并輸出。為了使得程序的輸出易于看到結(jié)果,仿照的實(shí)例程序,分別在生產(chǎn)者和消費(fèi)者進(jìn)程的合適的位置加入一些隨機(jī)睡眠時(shí)間。
代碼片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define?N?1000
using?namespace?std;
int?buff;
int?fulll;
int?*full2;
char?*buff1;
void?plusORde(int?numint?number){
????full2[num]=full2[num]+number;
}
void?down(int?*num)
{
????while(true)
????{
????????if(*num>0)
????????{
????????????*num=*num-1;
????????????break;
????????}
????????sleep(1);
????}
}
void?up(int?*num)
{
????*num=*num+1;
}
char?produce_item_low()
{
????char?ch=((rand()?+7)%?26+97);
????return?ch;
}
char?produce_item_lar()
{
????char?ch=(rand()?%?26+65);
????return?ch?;
}
char?remove_item()
{
????char?ch=buff1[full2[1]-1];
buff1[full2[1]-1]=‘\0‘;
????down(&full2[1]);
????return?ch;
}
void?printfCharArray(char?*chararrayint?len){
????printf(“?flag:?%d??len:?%d?\n“full2[4]len);
}
void?insert_item(char?x)
{
????char?xx[2];
????xx[0]=x;
????xx[1]=‘\0‘;
????strcat(buff1xx);
????????up(&full2[1]);
}
void?consume_item(char?item)
{
????printf(“\n?remove:%c?“item);
????printfCharArray(buff1full2[1]);
}
void?producer(int?flag)
{
char?item;
while?(true)
{
???????????if(full2[4]>200)sleep(
評(píng)論
共有 條評(píng)論