Semafory i pamięć wspólna

Zadanie 4 - Semafory i pamięć wspólna

(wersja wstępna) Celem ćwiczenia jest zaprezentowanie działania semaforów w celu ograniczenia dostępu kilku procesów do wspólnej sekcji krytycznej. Można w tym celu zilustrować problem pięciu filozofów (opisany m.in. w "Programowanie współbieżne - Ben Ari") lub napisać dowolny inny program działający według scenariusza, w którym kilka procesów próbuje kilkakrotnie wejść do sekcji krytycznej, np. w celu modyfikacji pewnej wspólnej zmiennej (tworzonej z użyciem pamięci współdzielonej).

W celu najlepszego zobrazowania tego, co się dzieje, przed i po wywołaniach funkcji zajmujących i zwalniających semafor powinny znaleźć się wywołania funkcji printf, drukującej na standardowe wyjście informacje o tym, co dany proces zrobił lub zamierza zrobić (np. próbuje zająć semafor lub informuje, że mu się to właśnie udało).

Inny sposób wykonania programu to utworzenie w pamięci współdzielonej bufor danych wykorzystywanego przez kilka procesów -- jedne z nich zapisują do bufora pewne informacje, inne odczytują je i drukują na standardowym wyjściu, korzystając z semaforów w celu synchronizacji dostępu.

Szczególną uwagę należy zwrócić na sposób synchronizacji procesów, tzn. sposób przekazania informacji, że pierwszy proces zapisał informacje do bufora, wobec czego drugi proces może je z tego bufora odczytać.

Szczegółowe propozycje projektów: