Lab 03: Semaphore
Voraussetzungen
Nutzen Sie hierfür gcc.
Sie können gcc unter Linux und/oder macOS direkt verwenden. Unter Linux installieren Sie gcc über Ihren Paket-Manager, unter macOX über Homebrew.
Nutzen Sie Windows 10 können Sie entweder eine Linux in einer virtuellen Maschine (z.B. in VirtualBox) nutzen, oder direkt das Windows Subsystem for Linux (WSL 2.0) nutzen. Alternativ ist es möglich Windows Subsystem for Linux über den Windows App Store zu installieren.
In der Wahl der Linux Distribution sind sie frei, alle Beispiele in der Vorlesung werden jedoch unter Ubuntu (letzter stabiler Release) bewertet und eventuell vorgestellt.
Aufgabenstellung
Implementieren Sie eine Semaphore auf Basis folgender Header-Datei (
sem.h
):
Ziel ist es die implementierung aus
semaphore.h
analog durch die implementierung aussem.h
zu ersetzen.
Dieses Programm erstellt eine Semaphore namens sem
und initialisiert sie mit dem Wert 1. Es erstellt dann einen neuen Thread, der die Funktion thread_func
ausführt. In der Hauptfunktion und im neuen Thread wird jeweils eine Schleife ausgeführt, in der die Semaphore mit der Funktion sem_wait
gesperrt wird, um den Zugriff auf eine gemeinsam genutzte Ressource zu synchronisieren. Nachdem die gemeinsam genutzte Ressource verwendet wurde, wird die Semaphore mit der Funktion sem_post
freigegeben. Am Ende des Programms wird die Semaphore mit der Funktion sem_destroy
freigegeben.
Implementieren Sie eine Struktur
hhn_sem_t
und die, für das vorherige Programm erforderlichen Funktionen (hhn_sem_wait
,hhn_sem_post
,hhn_sem_init
,hhn_sem_destroy
).Deklarieren Sie alle dafür erforderlichen Funktionen in einer Header Datei
sem.h
, tauschen Sie den Eintrag entsprechend in Ihrem Programm, so dass Ihre Implementierung der Semaphore verwendet wird.
Zur Abgabe reichen Sie sowohl Ihr Hauptprogramm, das neue Header-File (
sem.h
) als auch die Datei mit der Implementierung Ihrer Semaphore ein.
Hinweis: Ziel der Aufgabenstellung ist es, dass Sie die Grundfunktionalität einer Semaphore nachbilden können. Die Implementierung Ihrer Semaphore muss daher nicht Thread-sicher sein.
Abgabe
Die Bewertung Ihrer Abgabe findet automatisch statt. Stellen Sie hierzu folgende Punkte sicher:
Ihre Lösung befindet sich im Ordner aufgabe3.
Ihre Implementierung befindet sich in einer Datei mit dem Namen sem.c.
Sie nutzen eine Header-Datei in der der obige Header hinterlegt ist.
Zur Abgabe erhalten Sie einen Zugang zum hochschulinternen GitLab.
Ihre Lösung checken Sie in Ihrem Repository ein.
Bewertung
Die Bewertung Ihrer Aufgabe findet anhand einer Reihe von automatisierten Tests statt.
Hierzu ist es erforderlich, dass die obigen Schritte exakt eingehalten werden.
Ihr Implementierung wird einer Reihe von automatisierten Tests unterzogen, die Ihre Implementierung auf Korrektheit überprüfen.
Abgaben, die nicht vollständig sind oder die Abgabekriterien nicht erfüllen werden nicht bewertet.
Abgaben, die nicht fristgerecht eingereicht werden, werden nicht bewertet.
Nutzen Sie zur Abgabe ausschließlich das beschriebene Verfahren. Abgaben, die per E-Mail oder anderen Wegen eingereicht werden, werden nicht bewertet.
Abgaben, die aufgrund eines Fehlers nicht durch die Tests laufen, werden entsprechend mit weniger Punkten bewertet.
Last updated