Opis zlecenia
Napisz dwa programy reprezentujące producenta i konsumenta, oraz trzeci program - główną funkcję korzystającą z konsumenta i producenta, zapewniającą ich ciągłe i bezkolizyjne działanie.
Program powinien korzystać ze strefy buforowej (buffer) o N miejscach, oraz pozwalać na działanie N programów jednocześnie - produkujących i konsumujących różne przedmioty.
Liczba przedmiotów wyprodukowanych/skonsumowanych jednocześnie nie może przekraczać liczby miejsc w buforze.
Program powinien działać w zapętleniu (bez końca), z różnymi i zmieniającymi się prędkościami produkcji i konsumpcji.
Kolejność konsumowania przedmiotów powinna odzwierciedlać kolejność ich produkcji: pierwszy wyprodukowany przedmiot powinien być skonsumowany jako pierwszy.
Konsument nigdy nie powinien konsumować z niezapełnionego miejsca. Producent nigdy nie powinien zapełniać już zapełnionego miejsca.
W implementacji wykorzystaj funkcje mutex i/lub semaphores i/lub threads.
Fragment przykładowego outputu pożądanej postaci:
Producent1 wyprodukowal przedmiot 1
Producent3 wyprodukowal przedmiot 2
Producent2 wyprodukowal przedmiot 3
Konsument1 skonsumował przedmiot 1
Konsument2 skonsumował przedmiot 2
Producent1 wyprodukowal przedmiot 4
Konsument3 skonsumował przedmiot 3
.
.
.
Załączam przykładowe rozwiązanie (do użycia w linuxie lub kompilatorze C)
W przypadku Linuxa włączanie programów powinno przebiegać w sposób analogiczny do poniższego (nazwy odnoszą się do przykładowych załączonych plików):
gcc start.c -o start -lpthread -lrt
gcc producer.c -o producer -lpthread -lrt
gcc consumer.c -o consumer -lpthread -lrt
gcc unlink.c -o unlink -lpthread -lrt