Synchronisiere das mehrfach-threaded Drucken mit Mutex

CBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du Mutex verwenden kannst, um das Drucken von Zeichenketten in einem mehrfach-threaded Umgebung zu synchronisieren. Du wirst ein bestehendes "Chaotischer Schreibmaschine" Programm modifizieren, um sicherzustellen, dass die Zeichenketten in der richtigen Reihenfolge gedruckt werden, ohne dass irgendwelche Buchstaben vermischt werden.

👀 Vorschau

$ gcc printer.c -o printer -lpthread
$./printer
helloworld

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du einen Mutex in der init() Funktion initialisierst
  • Wie du den Mutex in der printer() Funktion sperrst und entsperrst, um einen exklusiven Zugang zum Druckprozess zu gewährleisten
  • Wie du das modifizierte Programm kompilierst und ausführst, um die korrekte Ausgabe zu beobachten

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Die Wichtigkeit von Mutex beim Synchronisieren des Zugangs zu geteilten Ressourcen in einem mehrfach-threaded Programm zu verstehen
  • Mutex-Sperr- und Entsperrtechniken anzuwenden, um die Ausführung mehrerer Threads zu koordinieren
  • Probleme in einem mehrfach-threaded Programm zu diagnostizieren und zu beheben, um die gewünschte Ausgabe zu erzielen

Initialisiere den Mutex

In diesem Schritt lernst du, wie du den Mutex in der init() Funktion initialisierst. Folge den Schritten unten, um diesen Schritt abzuschließen:

  1. Öffne die Datei printer.c, die sich im Verzeichnis /home/labex/project/ befindet.
  2. Im bereits vorhandenen Code für die Funktion printer wird der Mutex am Anfang gesperrt (pthread_mutex_lock(&mutex)), um einen exklusiven Zugang zum Druckprozess zu gewährleisten. Sobald die Zeichenkette vollständig gedruckt ist, wird der Mutex entsperrt (pthread_mutex_unlock(&mutex)), was es dem anderen Thread ermöglicht, zu drucken.
  3. Locate die init() Funktion und füge den folgenden Code hinzu, um den Mutex zu initialisieren:
void init()
{
    pthread_mutex_init(&mutex, NULL);
}

Dies initialisiert die Variable mutex mit der Funktion pthread_mutex_init(), die Teil der POSIX Threads (pthreads) Bibliothek ist. Der zweite Parameter NULL gibt an, dass wir die Standard-Mutex-Attribute verwenden.

Kompiliere und führe das Programm aus

Jetzt, nachdem du die Änderungen an der Datei printer.c abgeschlossen hast, kannst du das Programm kompilieren und ausführen.

  1. Öffne ein Terminal und navigiere zum Verzeichnis /home/labex/project/.
  2. Kompiliere das Programm mit der Option -lpthread, um die pthreads-Bibliothek zu verlinken:
gcc printer.c -o printer -lpthread
  1. Führe das Programm aus:
./printer

Du solltest jetzt die Ausgabe sehen:

helloworld

Die Zeichenketten "hello" und "world" werden in der richtigen Reihenfolge gedruckt, ohne dass die Buchstaben vermischt werden, wie erwartet.

Herzlichen Glückwunsch! Du hast das "Chaotische Schreibmaschinen"-Programm erfolgreich so modifiziert, dass es wie gewünscht funktioniert.

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben