Υπάρχει κάποια διαφορά μεταξύ της κατάστασης αδιεξόδου και της μη ασφαλούς κατάστασης;


Απάντηση 1:

Το αδιέξοδο είναι αρκετά καλά καθορισμένο - το σύνολο των νημάτων βρίσκεται σε κατάσταση "αναμονής" λόγω κυκλικών εξαρτήσεων. Δεν γνωρίζω ποια είναι η κατάσταση "μη ασφαλούς" γενικά της CS.

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

Για τα συστήματα πληροφορικής θα μπορούσατε να τους κλείσετε με ασφάλεια για να αποτρέψετε τη διαφθορά των δεδομένων, για τα συστήματα OT που ελέγχουν πιθανότατα ότι δεν σας απασχολεί η θεωρητική πιθανότητα κάποιας καταστροφής δεδομένων και προτιμάτε το σύστημα να λειτουργήσει, εάν τερματιστεί το σύστημα θα οδηγήσει αποτυχία της αποστολής. Για ορισμένα επικίνδυνα συστήματα, όπου η ανθρώπινη παρέμβαση πρέπει να "διακόψει" τη διαδικασία αν κάτι πάει άσχημα, η έλλειψη επικοινωνίας με το "ανθρώπινο" (χαμένο κανάλι-έλεγχος κ.λπ.) θα μπορούσε να θεωρηθεί ως "ανασφαλής" (παρόμοιο με το νεκρό άτομο που ενεργοποιεί τα τρένα).

Όλα αυτά τα "μη ασφαλή κράτη" ανήκουν στις προδιαγραφές και στην περιοχή ορισμού του προϊόντος, όχι στην καθαρή CS (αντίθετη προς το αδιέξοδο, καθώς κανείς σε επίπεδο προϊόντος δεν ενδιαφέρεται για την ύπαρξη, την πρόληψη ή την επίλυση αδιεξόδων, τρόπος).


Απάντηση 2:

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

Το αδιέξοδο σημαίνει ότι κάποια δέσμη νημάτων περιμένουν ο ένας τον άλλον να κάνει κάτι, σε έναν κύκλο που σταματάει το σπείρωμα 1 μέχρι να λάβει το νήμα 2, το σπείρωμα 2 μέχρι το σπείρωμα 3 να κάνει κάτι, το σπείρωμα 3 μέχρι ... και ούτω καθεξής, το νήμα N που περιμένει δράση από το νήμα 1.

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

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