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

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

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

Βίντεο: Διαφορά μεταξύ Semaphore και Mutex
Βίντεο: Leopard & Jaguar -The Differences 2024, Νοέμβριος
Anonim

Semaphore vs Mutex

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

Τι είναι ο σηματοφόρος;

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

Τι είναι το Mutex;

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

Ποια είναι η διαφορά μεταξύ Semaphore και Mutex;

Μολονότι, τόσο οι σηματοφόροι όσο και τα αντικείμενα mutex χρησιμοποιούνται για την επίτευξη αμοιβαίας εξαίρεσης σε περιβάλλοντα παράλληλου προγραμματισμού, έχουν κάποιες διαφορές. Ένα αντικείμενο mutex επιτρέπει μόνο σε ένα νήμα να καταναλώνει έναν πόρο ή ένα κρίσιμο τμήμα, ενώ οι σηματοφόροι επιτρέπουν έναν περιορισμένο αριθμό ταυτόχρονων προσβάσεων σε έναν πόρο (κάτω από έναν μέγιστο επιτρεπόμενο αριθμό). Με αντικείμενα mutex, άλλα νήματα που θέλουν να αποκτήσουν πρόσβαση στον πόρο πρέπει να περιμένουν σε μια ουρά, μέχρι να ολοκληρωθεί το τρέχον νήμα χρησιμοποιώντας τον πόρο.

Συνιστάται: