sexta-feira, 8 de maio de 2009

Produtores e consumidores

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:

Nenhum comentário:

Postar um comentário

Seguidores