O problema dos produtores e consumidores foi implementado segundo o seguinte código:
#include <stdio.h>
#include <string.h>
#define READ 0
#define WRITE 1
void main ()
{
int fd [2], bytesRead;
char message[100];
char phrase[100];
int id=1;
int count=0;
pipe (fd);
while(id && count<=20){
count++;
id=fork();
}
if (id == 0){
while(1){
sleep(1);
sprintf(phrase,"%i",getpid());
write (fd[WRITE],phrase, strlen (phrase) + 1);
}
}
else{
count=0;
while(id && count<=1){
count++;
id=fork();
}
if(!id){
while(1){
sleep(1);
bytesRead = read (fd[READ], message, 100);
printf ("Processo %i recebe item do processo %s\n",getpid(),message);
}
}
}
}
O que esse programa faz é, primeiramente, criar vários processos filhos utilizando-se a função fork(). Esses primeiros processos serão os produtores. Segundamente, são criados mais processos filhos, os quais serão os consumidores. O item produzido é o próprio process id do produtor.
Abaixo, será apresentado um exemplo com poucos produtores e muitos consumidores.
Agora, será apresentado um exemplo com muitos produtores e poucos consumidores.
Como os consumidores não conseguem consumir todo o conteúdo do pipe, começam a surgir resquícios, representados pelos algarismos solitários.
Durante a execução do programa, foi realizada a chamada a ps -es para se verificar o estado dos processos:
Páginas
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário