Αμοιβαίος αποκλεισμός (υπολογιστές)

Στην επιστήμη των υπολογιστών με τον όρο αμοιβαίο αποκλεισμό (Αγγλικά: Mutual exclusion) αναφερόμαστε στην διασφάλιση παράλληλων διεργασιών να αποκτήσουν αποκλειστική πρόσβαση όταν φτάσουν σε μια κρίσιμη περιοχή (όπου υπάρχει διαμοιρασμός πόρων όπως για παράδειγμα μια κοινή θέση μνήμης). Η ιδέα είναι να υπάρξει ένας μηχανισμός ώστε όταν δύο παράλληλες διεργασίες θέλουν να χρησιμοποιήσουν ένα κοινό πόρο να μην υπάρχει σύγκρουση επεξεργασίας αλλά να διασφαλίζεται ένας αμοιβαίος αποκλεισμός. Το πρόβλημα αυτό μελετήθηκε από τον Ντάικστρα σε ακαδημαϊκή δημοσίευση το 1965 με τίτλο Λύση στο πρόβλημα ελέγχου παράλληλων και ταυτόχρονων προγραμμάτων. Θεωρείται ο πρώτος που ασχολήθηκε με παράλληλους αλγόριθμους.  

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

Ένα απλό παράδειγμα γιατί ο αμοιβαίος αποκλεισμός είναι σημαντικός στην πράξη μπορεί να φανεί στο παράδειγμα μιας απλής συνδεδεμένης λίστας. Σε αυτή την λίστα η αφαίρεση ενός κόμβου γίνεται αλλάζοντας τον δείκτη που δείχνει στον επόμενο κόμβο. Για παράδειγμα εάν ο κόμβος i θέλουμε να αφαιρεθεί τότε το επόμενος δείκτης του i-1 θα αλλαχθεί ώστε να δείχνει τον κόμβο i+1. Στην περίπτωση που η συνδεδεμένη λίστα είναι προσβάσιμη από δύο παράλληλες διεργασίες και στην περίπτωση που και οι δύο διεργασίες προσπαθήσουν να αφαιρέσουν δύο διαφορετικούς κόμβους παράλληλα ενδέχεται να αντιμετωπίσουμε το παρακάτω πρόβλημα: έστω οι κόμβοι i και i+1 θέλουμε να αφαιρεθούν. Μετά την αφαίρεση ο κόμβος i-1 θα δείχνει τον i+1 ενώ ο κόμβος i θα δείχνει στον i+2. Παρόλο που οι δύο διεργασίες θα ολοκληρώσουν παράλληλα και με επιτυχία τις αφαιρέσεις των δύο κόμβων στην πράξη ο κόμβος i+1 δεν αφαιρείται. Για να λυθεί σωστά το πρόβλημα θα πρέπει να απαιτείται ο αμοιβαίος αποκλεισμών των διεργασιών όταν οι διεργασίες φτάνουν στην κρίσιμη περιοχή αφαίρεσης του κόμβου. Όταν η μια διεργασία αμοιβαία αποκλείει την άλλη κατά την κρίσιμη περιοχή η αφαίρεση και των δύο κόμβων συνδεδεμένη λίστα μπορεί να γίνει με επιτυχία.

Παραπομπές

Προγραμματισμός
Νήματα