Witam,
Mam do napisania trzy oddzielne programy, dwa pełnią rolę producenta i odczytują tekst (po wyrazie) z dwóch oddzielnych plików i wysyłają do pamięci współdzielonej, z czego pierwszy wykonuje się trzy razy częściej niż drugi, oraz trzeci program pełniący rolę konsumenta, który odczytuje z pamięci współdzielonej przesłane słowa przez producentów i wyprowadza na ekran. Każdy program uruchamiam w oddzielnej konsoli a za pomocą semaforów zsynchronizowane jest ich działanie.
Wszystko działa poprawnie, do momentu kiedy zostaje do odczytania końcówka tekstu, jakieś ostatnie 50 wyrazów. Wtedy proces konsumenta (wyświetlający) się zawiesza. Dopiero po wywołaniu sygnału przerwania "ctrl + c" reszta tekstu zostaje wyświetlona na ekran. Zmniejszałem/zwiększałem długość tekstu dla producenta czytającego 3x więcej i niezależnie od tego, pod koniec zawsze następuje zawieszenie.
Chciałbym zapytać, co może powodować takie działanie programu? Semafory działają poprawnie ponieważ prawidłowo wyświetla mi 3 słowa z 1 pliku i później 1 słowo z drugiego i tak w kółko, aż nagle pod koniec się zatrzymuje.
Poniżej zamieszczam zdjęcie z uruchomienia programu. Widać tutaj, że dopiero po sygnale "^C" reszta tekstu pojawia się na ekranie a zawieszenie następuje w połowie wyświetlania wyrazu.