Βασιλείου Ρηγίνος sdi1900019
Το πρόγραμμά μου αποτελείται από μια main στην οποία υπάρχει ο κώδικας για τη γονική διεργασία και για τα παιδιά. Αρχικά φτιάχνω τη διαμοιραζόμενη μνήμη και την κάνω attach στο process. Ανοίγω το αρχείο από το οποίο θέλω να διαβάσω τις γραμμές , μπορείτε να δώσετε όποιο αρχείο κειμένου θέλετε στη μεταβλητή filename). Στην αρχή υπολογίζω τις γραμμές του αρχείου. Μετά φτιάχνω τους σημαφόρους. Χρησιμοποιώ 3 named semaphores. Ο sem1 είναι για να δηλώνει αν η γονική διεργασία έχει τελειώσει με το προηγούμενο παιδί. Ο sem2 δείχνει αν ο πατέρας έχει τελειώσει με το προηγούμενο αίτημα και ο sem3 περιμένει το παιδί να γράψει στη μνήμη.
Έχουμε το shared memory, και ο πρώτος σημαφόρος δείχνει ότι ο πατέρας δε χρειάζεται να περιμένει κάποιο παιδί (έχει αρχικοποιηθεί με 1, οπότε μπαίνει στην sem_wait() χωρίς να χρειαστεί να περιμένει). Τώρα έχει τιμή 0. Μετά περιμένει από το παιδί να γράψει στη μνήμη εφόσον ο 3ος σημαφόρος είναι 0. Παίρνει από το παιδί τον τυχαίο αριθμό και ψάχνει τη γραμμή του αρχείου, τη βρίσκει και την εκτυπώνει. Μετά δηλώνει πως είναι έτοιμος για το επόμενο request.
Έχουμε το shared memory, και με τον δεύτερο σημαφόρο περιμένουμε τον πατέρα να τελειώσει με το προηγούμενο request. Βρίσκει έναν τυχαίο αριθμό και τον γράφει στη μνήμη. Μετά δηλώνει στον πατέρα ότι έγραψε στη μνήμη. Όταν τελειώσει με τα n requests δηλώνει στον πατέρα ότι τελείωσε αυτό το παιδί.
Αρχίζει από τη στιγμή που θα γράψει το παιδί στη μνήμη και τελειώνει στη στιγμή που θα επιστρέψει από τη γονική διεργασία και έχει εκτυπωθεί το μήνυμα.