Witam,
Chciałem napisać program realizujący zagadnienie producenta-konsumenta. Napisałem coś takiego:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
# define MAKS 10
int bufor[MAKS];
int we = 0, wy = 0;
int ile = 0;
void produkuj(){
bufor[we] = rand()%100;
printf("PROD: %d", bufor[we]);
we++; ile++;
}
void konsumuj(){
printf("KONS: %d", bufor[wy]);
wy++;
}
int main(){
srand(time(NULL));
int pid;
pid = fork();
if (pid < 0){
fprintf(stderr, "Aaaaa! fatal error!\n");
exit(-1);
}
if (pid > 0) { //jestesmy w procesie macierzystym - powiedzmy w producencie
while (1){
if (ile == 100)
break;
while ((we+1) % MAKS == wy) ; //bufor jest pelny
produkuj();
}
exit(0);
}
if (pid == 0) { //jesetesmy w procesie potomnym - konsumencie
while (1){
while (we == wy) ; //bufor jest pusty
konsumuj();
}
exit(0);
}
return 0;
}
To jednak nie działa, bo jak się przekonałem proces potomny posiada kopię rejestrów procesu macierzystego, ale później zmienne we, wy, bufor, nie są już wspólne.
Czy ktoś mógłby poprawić mój kod tak, aby spełniał swoje zadanie?