Semaphore vs Monitor
Το Semaphore είναι μια δομή δεδομένων που χρησιμοποιείται για να διασφαλιστεί ότι πολλές διεργασίες δεν έχουν πρόσβαση σε έναν κοινό πόρο ή σε ένα κρίσιμο τμήμα ταυτόχρονα, σε παράλληλα περιβάλλοντα προγραμματισμού. Οι σηματοφόροι χρησιμοποιούνται για να αποφευχθούν οι αδιέξοδες συνθήκες και οι συνθήκες αγώνα. Η παρακολούθηση είναι μια κατασκευή γλώσσας προγραμματισμού που χρησιμοποιείται επίσης για την αποφυγή πολλαπλών διεργασιών που έχουν πρόσβαση σε έναν κοινό πόρο ταυτόχρονα, επομένως εγγυάται τον αμοιβαίο αποκλεισμό. Οι οθόνες χρησιμοποιούν μεταβλητές υπό όρους για να επιτύχουν αυτήν την εργασία.
Τι είναι ο σηματοφόρος;
Το Semaphore είναι μια δομή δεδομένων που χρησιμοποιείται για την παροχή αμοιβαίου αποκλεισμού σε κρίσιμα τμήματα. Οι σηματοφόροι υποστηρίζουν κυρίως δύο λειτουργίες που ονομάζονται αναμονή (ιστορικά γνωστή ως P) και σήμα (ιστορικά γνωστή ως V). Η λειτουργία αναμονής μπλοκάρει μια διαδικασία έως ότου ανοίξει ο σηματοφόρος και η λειτουργία σήματος επιτρέπει την είσοδο μιας άλλης διεργασίας (νήμα). Κάθε σηματοφόρος σχετίζεται με μια ουρά διαδικασιών αναμονής. Όταν η λειτουργία αναμονής καλείται από ένα νήμα, εάν ο σηματοφόρος είναι ανοιχτός, το νήμα μπορεί να συνεχιστεί. Εάν ο σηματοφόρος είναι κλειστός όταν η λειτουργία αναμονής καλείται από ένα νήμα, το νήμα μπλοκάρεται και πρέπει να περιμένει στην ουρά. Η λειτουργία σήματος ανοίγει έναν σηματοφόρο και εάν υπάρχει ήδη ένα νήμα που περιμένει στην ουρά, αυτή η διαδικασία επιτρέπεται να προχωρήσει και εάν δεν υπάρχουν νήματα που περιμένουν στην ουρά, το σήμα απομνημονεύεται για τα επόμενα νήματα. Υπάρχουν δύο τύποι σηματοφόρων που ονομάζονται σηματοφόροι mutex και σηματοφόροι μέτρησης. Οι σηματοφόροι Mutex επιτρέπουν μια ενιαία πρόσβαση σε έναν πόρο και οι σηματοφόροι μέτρησης επιτρέπουν σε πολλά νήματα να έχουν πρόσβαση σε έναν πόρο (ο οποίος έχει πολλές διαθέσιμες μονάδες).
Τι είναι η οθόνη;
Η οθόνη είναι μια κατασκευή γλώσσας προγραμματισμού που χρησιμοποιείται για τον έλεγχο της πρόσβασης σε κοινόχρηστα δεδομένα. Οι οθόνες ενσωματώνουν κοινές δομές δεδομένων, διαδικασίες (που λειτουργούν σε κοινόχρηστες δομές δεδομένων) και συγχρονισμό μεταξύ ταυτόχρονων κλήσεων διαδικασίας. Μια οθόνη διασφαλίζει ότι τα δεδομένα της δεν αντιμετωπίζουν μη δομημένες προσβάσεις και εγγυάται ότι τα πέλματα (τα οποία έχουν πρόσβαση στα δεδομένα της οθόνης μέσω των διαδικασιών της) αλληλεπιδρούν με νόμιμο τρόπο. Μια οθόνη εγγυάται τον αμοιβαίο αποκλεισμό επιτρέποντας μόνο σε ένα νήμα να εκτελέσει οποιαδήποτε διαδικασία παρακολούθησης σε μια δεδομένη στιγμή. Εάν ένα άλλο νήμα προσπαθήσει να καλέσει μια μέθοδο στην οθόνη, ενώ ένα νήμα εκτελεί ήδη μια διαδικασία στην οθόνη, τότε η δεύτερη διαδικασία μπλοκάρεται και πρέπει να περιμένει στην ουρά. Υπάρχουν δύο τύποι οθονών που ονομάζονται οθόνες Hoare και οθόνες Mesa. Διαφέρουν κυρίως ως προς τη σημασιολογία του προγραμματισμού τους.
Ποια είναι η διαφορά μεταξύ Semaphore και Monitor;
Μολονότι τόσο οι σηματοφόροι όσο και οι οθόνες χρησιμοποιούνται για την επίτευξη αμοιβαίου αποκλεισμού σε περιβάλλοντα παράλληλου προγραμματισμού, διαφέρουν ως προς τις τεχνικές που χρησιμοποιούνται για την επίτευξη αυτής της εργασίας. Στις οθόνες, ο κώδικας που χρησιμοποιείται για την επίτευξη αμοιβαίου αποκλεισμού βρίσκεται σε ένα μόνο μέρος και είναι πιο δομημένος, ενώ ο κώδικας για τους σηματοφόρους διανέμεται ως κλήσεις λειτουργίας αναμονής και σήματος. Επίσης, είναι πολύ εύκολο να κάνεις λάθη κατά την υλοποίηση σηματοφόρων, ενώ υπάρχει πολύ μικρή πιθανότητα να κάνεις λάθη κατά την υλοποίηση οθονών. Επιπλέον, οι οθόνες χρησιμοποιούν μεταβλητές συνθήκης, ενώ οι σηματοφόροι όχι.