Skocz do zawartości

[c] Problem Producenta-konsumenta


sam_on

Rekomendowane odpowiedzi

Witam,

Chciałem napisać program realizujący zagadnienie producenta-konsumenta. Naiwnie 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 dostaje na początku tylko 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?

 

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety oprawić nie mogę , bo nie umiem ani mi się uczyć nie chce.

 

Ogólnie to fork() tworzy kopię programu, czyli efekt jest taki jakby uruchomić dwa oddzielne programy (o oddzielnych przestrzeniach adresowych).

Zatem trzeba by użyć jakieś metody komunikacji między procesami, np przez plik, tcp czy inne pipe'y.hf

 

 

Jeśli piszę tu jakieś bzdury, to proszę aby ktoś mnie poprawił.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...