Mutex vs Semaphore: Ποια είναι η διαφορά;

Πίνακας περιεχομένων:

Anonim

Τι είναι το Semaphore;

Το Semaphore είναι απλώς μια μεταβλητή που δεν είναι αρνητική και μοιράζεται μεταξύ των νημάτων. Ένα σηματοφόρο είναι ένας μηχανισμός σηματοδότησης και ένα νήμα που περιμένει σε ένα σηματοφόρο μπορεί να σηματοδοτηθεί από ένα άλλο νήμα. Χρησιμοποιεί δύο ατομικές λειτουργίες, 1) αναμονή και 2) σήμα για τον συγχρονισμό της διαδικασίας.

Ένα σηματοφόρο επιτρέπει είτε απαγορεύει την πρόσβαση στον πόρο, το οποίο εξαρτάται από τον τρόπο ρύθμισής του.

Σε αυτό το σεμινάριο, θα μάθετε:

  • Τι είναι το Mutex;
  • Χρήση του Semaphore
  • Χρήση του Mutex
  • Διαφορά μεταξύ Semaphore εναντίον Mutex
  • Κοινές παρανοήσεις σχετικά με το Mutex και το Semaphore
  • Πλεονεκτήματα του Semaphore
  • Πλεονεκτήματα του Mutex
  • Μειονέκτημα των Semaphores
  • Μειονεκτήματα του Mutex

Τι είναι το Mutex;

Η πλήρης μορφή του Mutex είναι το αντικείμενο αμοιβαίου αποκλεισμού. Είναι ένας ειδικός τύπος δυαδικού σηματοδότη που χρησιμοποιείται για τον έλεγχο της πρόσβασης στον κοινόχρηστο πόρο. Περιλαμβάνει έναν μηχανισμό κληρονομικής προτεραιότητας για την αποφυγή παρατεταμένων προβλημάτων αναστροφής προτεραιότητας. Επιτρέπει τις τρέχουσες εργασίες υψηλότερης προτεραιότητας να διατηρούνται σε κατάσταση αποκλεισμού για το συντομότερο δυνατό χρόνο. Ωστόσο, η κληρονομιά προτεραιότητας δεν διορθώνει την αντιστροφή προτεραιότητας αλλά ελαχιστοποιεί μόνο την επίδρασή της.

ΒΑΣΙΚΗ ΔΙΑΦΟΡΑ

  • Το Mutex είναι ένας μηχανισμός κλειδώματος ενώ ο Semaphore είναι ένας μηχανισμός σηματοδότησης
  • Το Mutex είναι απλώς ένα αντικείμενο, ενώ το Semaphore είναι ένας ακέραιος
  • Το Mutex δεν έχει δευτερεύοντα τύπο ενώ το Semaphore έχει δύο τύπους, που μετράει το σηματοφόρο και το δυαδικό σηματοφόρο.
  • Το Semaphore υποστηρίζει τροποποίηση λειτουργιών αναμονής και σήματος, ενώ το Mutex τροποποιείται μόνο από τη διαδικασία που μπορεί να ζητήσει ή να αποδεσμεύσει έναν πόρο.
  • Η τιμή Semaphore τροποποιείται χρησιμοποιώντας τις λειτουργίες αναμονής () και σήματος (), από την άλλη πλευρά, οι λειτουργίες Mutex είναι κλειδωμένες ή ξεκλειδωμένες.

Χρήση του Semaphore

Στην περίπτωση ενός buffer, μπορούμε να διαχωρίσουμε το buffer 4 KB σε τέσσερα buffer 1 KB. Το Semaphore μπορεί να συσχετιστεί με αυτά τα τέσσερα buffer. Αυτό επιτρέπει στους χρήστες και τους παραγωγούς να εργάζονται ταυτόχρονα σε διαφορετικά buffer.

Χρήση του Mutex

Ένα mutex παρέχει αμοιβαίο αποκλεισμό, ο οποίος μπορεί να είναι είτε παραγωγός είτε καταναλωτής που μπορεί να έχει το κλειδί (mutex) και να συνεχίσει τη δουλειά του. Εφόσον ο παραγωγός γεμίζει buffer, ο χρήστης πρέπει να περιμένει και το αντίστροφο. Στο κλείδωμα Mutex, συνεχώς, μόνο ένα νήμα μπορεί να λειτουργήσει με ολόκληρο το buffer.

Διαφορά μεταξύ Semaphore εναντίον Mutex

Παράμετροι Σηματοφόρος Σίγαση
Μηχανισμός Είναι ένας τύπος μηχανισμού σηματοδότησης. Είναι ένας μηχανισμός κλειδώματος.
Τύπος δεδομένων Το Semaphore είναι μια ακέραια μεταβλητή. Το Mutex είναι απλώς ένα αντικείμενο.
Τροποποίηση Οι λειτουργίες αναμονής και σήματος μπορούν να τροποποιήσουν ένα σηματοφόρο. Τροποποιείται μόνο από τη διαδικασία που μπορεί να ζητήσει ή να αποδεσμεύσει έναν πόρο.
Διαχείριση πόρων Εάν κανένας πόρος δεν είναι δωρεάν, τότε η διαδικασία απαιτεί έναν πόρο που θα πρέπει να εκτελεί λειτουργία αναμονής. Θα πρέπει να περιμένει έως ότου ο αριθμός των σηματοφόρων να είναι μεγαλύτερος από 0. Εάν είναι κλειδωμένο, η διαδικασία πρέπει να περιμένει. Η διαδικασία πρέπει να διατηρείται σε ουρά. Πρέπει να έχετε πρόσβαση μόνο όταν το mutex είναι ξεκλείδωτο.
Νήμα Μπορείτε να έχετε πολλά νήματα προγράμματος. Μπορείτε να έχετε πολλά νήματα προγραμμάτων στο mutex αλλά όχι ταυτόχρονα.
Ιδιοκτησία Η τιμή μπορεί να αλλάξει με οποιαδήποτε διαδικασία απελευθέρωσης ή απόκτησης του πόρου. Το κλείδωμα αντικειμένου απελευθερώνεται μόνο από τη διαδικασία, η οποία έχει αποκτήσει το κλείδωμα σε αυτό.
Τύποι Οι τύποι Semaphore μετρούν το σηματοφόρο και το δυαδικό σηματοφόρο. Το Mutex δεν έχει δευτερεύοντες τύπους.
Λειτουργία Η τιμή Semaphore τροποποιείται χρησιμοποιώντας τη λειτουργία αναμονής () και σήματος (). Το αντικείμενο Mutex είναι κλειδωμένο ή ξεκλειδωμένο.
Πληρότητα πόρων Απασχολείται εάν χρησιμοποιούνται όλοι οι πόροι και η διαδικασία που ζητά πόρο εκτελεί λειτουργία αναμονής () και μπλοκάρει έως ότου ο αριθμός των σηματοφόρων γίνει> 1. Σε περίπτωση που το αντικείμενο είναι ήδη κλειδωμένο, η διαδικασία που ζητά πόρους περιμένει και βρίσκεται στην ουρά από το σύστημα προτού απελευθερωθεί το κλείδωμα.

Κοινά γεγονότα για το Mutex και το Semaphore

Εδώ, είναι μερικά κοινά στοιχεία για το Mutex και το Semaphore:

  • Μόνο μία εργασία μπορεί να αποκτήσει το mutex. Επομένως, υπάρχει ιδιοκτησία που σχετίζεται με mutex και μόνο ο κάτοχος μπορεί να αποδεσμεύσει το mutex.
  • Οι λόγοι για τη χρήση του mutex και του semaphore είναι διαφορετικοί ίσως λόγω της ομοιότητας στην εφαρμογή τους, ένα mutex θα αναφέρεται ως δυαδικό σηματοφόρο.
  • Μία πολύ γνωστή εσφαλμένη αντίληψη είναι ότι οι Mutexes και Semaphores είναι σχεδόν ίδιοι, με τη μόνη διαφορά ότι το Mutex είναι σε θέση να μετράει στο 1, ενώ οι Semaphores μπορούν να μετράνε από 0 έως N.
  • Υπάρχει πάντα αβεβαιότητα μεταξύ του δυαδικού σηματοφόρου και του mutex. Μπορεί να ακούσετε ότι το mutex είναι ένα δυαδικό σηματοφόρο, το οποίο δεν είναι σωστό.

Πλεονεκτήματα του Semaphore

Εδώ είναι τα πλεονεκτήματα / οφέλη από τη χρήση του Semaphore:

  • Επιτρέπει σε περισσότερα από ένα νήματα να έχουν πρόσβαση στην κρίσιμη ενότητα
  • Τα Semaphores είναι ανεξάρτητα από τη μηχανή.
  • Τα Semaphores εφαρμόζονται στον ανεξάρτητο από τον κώδικα κώδικα του μικροπυρήνα.
  • Δεν επιτρέπουν την είσοδο πολλαπλών διαδικασιών στην κρίσιμη ενότητα.
  • Καθώς υπάρχει πολυάσχολη αναμονή στο semaphore, δεν υπάρχει ποτέ σπατάλη χρόνου και πόρων της διαδικασίας.
  • Είναι ανεξάρτητες από το μηχάνημα, οι οποίες πρέπει να εκτελούνται στον ανεξάρτητο από τον κώδικα κώδικα του μικροπυρήνα.
  • Επιτρέπουν την ευέλικτη διαχείριση των πόρων.

Πλεονεκτήματα του Mutex

Εδώ, είναι σημαντικά πλεονεκτήματα / οφέλη του Mutex

  • Οι Mutexes είναι απλές κλειδαριές που λαμβάνονται πριν εισέλθουν στην κρίσιμη ενότητα και στη συνέχεια την απελευθερώνουν.
  • Δεδομένου ότι μόνο ένα νήμα βρίσκεται στην κρίσιμη ενότητα του κάθε δεδομένη στιγμή, δεν υπάρχουν συνθήκες αγώνα και τα δεδομένα παραμένουν πάντα συνεπή.

Μειονέκτημα των Semaphores

Εδώ είναι τα μειονεκτήματα / μειονέκτημα του σηματοφόρου

  • Ένας από τους μεγαλύτερους περιορισμούς ενός σηματοφόρου είναι η αντιστροφή προτεραιότητας.
  • Το λειτουργικό σύστημα πρέπει να παρακολουθεί όλες τις κλήσεις για αναμονή και να σηματοδοτεί σηματοφόρο.
  • Η χρήση τους δεν επιβάλλεται ποτέ, αλλά γίνεται μόνο βάσει σύμβασης.
  • Προκειμένου να αποφευχθούν τα αδιέξοδα στο σηματοφόρο, οι λειτουργίες Wait και Signal πρέπει να εκτελεστούν με τη σωστή σειρά.
  • Ο προγραμματισμός Semaphore είναι μια πολύπλοκη μέθοδος, οπότε υπάρχουν πιθανότητες να μην επιτευχθεί αμοιβαίος αποκλεισμός.
  • Επίσης, δεν είναι πρακτική μέθοδος για χρήση σε μεγάλη κλίμακα, καθώς η χρήση τους οδηγεί σε απώλεια αρθρωτότητας.
  • Το Semaphore είναι πιο επιρρεπές σε σφάλματα προγραμματιστή.
  • Μπορεί να προκαλέσει αδιέξοδο ή παραβίαση του αμοιβαίου αποκλεισμού λόγω σφάλματος προγραμματιστή.

Μειονεκτήματα του Mutex

Εδώ είναι τα μειονεκτήματα / μειονεκτήματα του Mutex

  • Εάν ένα νήμα αποκτήσει μια κλειδαριά και πάει για ύπνο ή είναι προληπτικό, τότε το άλλο νήμα μπορεί να μην είναι σε θέση να προχωρήσει. Αυτό μπορεί να οδηγήσει σε πείνα.
  • Δεν μπορεί να κλειδωθεί ή να ξεκλειδωθεί από διαφορετικό περιβάλλον από αυτό που το απέκτησε.
  • Μόνο ένα νήμα πρέπει να επιτρέπεται στην κρίσιμη ενότητα κάθε φορά.
  • Η κανονική εφαρμογή μπορεί να οδηγήσει σε κατάσταση απασχολημένης αναμονής, η οποία σπαταλά το χρόνο της CPU.