Εάν ο κώδικάς σας βρίσκεται σε μια διαδικασία που έχει πολλά νήματα που εκτελούνται ταυτόχρονα, μπορεί να εκτελεί τον κώδικα ταυτόχρονα. Εάν το αποτέλεσμα κάθε εκτέλεσης είναι το ίδιο με αυτό ενός μεμονωμένου νήματος και οι τιμές άλλων μεταβλητών είναι ίδιες με τις αναμενόμενες, είναι ασφαλές για το νήμα. Με άλλα λόγια, η διεπαφή που παρέχεται από μια κλάση ή ένα πρόγραμμα είναι ατομική για νήματα ή η εναλλαγή μεταξύ πολλαπλών νημάτων δεν οδηγεί σε ασάφεια στο αποτέλεσμα εκτέλεσης της διεπαφής, πράγμα που σημαίνει ότι δεν χρειάζεται να εξετάσουμε το συγχρονισμό. Τα ζητήματα ασφάλειας νημάτων προκαλούνται τόσο από καθολικές όσο και από στατικές μεταβλητές. Εάν κάθε νήμα έχει μόνο λειτουργίες ανάγνωσης για καθολικές μεταβλητές και στατικές μεταβλητές, αλλά όχι λειτουργίες εγγραφής, σε γενικές γραμμές, αυτή η καθολική μεταβλητή είναι ασφαλής για νήματα. Εάν πολλά νήματα εκτελούν λειτουργίες ανάγνωσης και εγγραφής σε μια μεταβλητή ταυτόχρονα, απαιτείται γενικά συγχρονισμός νημάτων, διαφορετικά μπορεί να επηρεαστεί η ασφάλεια του νήματος.
Ο σκοπός του κλειδώματος είναι να αποτρέψει τις ταυτόχρονες λειτουργίες κατά την εκτέλεση πολλαπλών νημάτων και τα αντικείμενα του τύπου αναφοράς κλειδώματος επιτρέπουν μόνο ένα νήμα να λειτουργεί κάθε φορά στην κλειδωμένη περιοχή του.
Το κλείδωμα μπορεί να κλειδώσει μόνο μία μεταβλητή τύπου αναφοράς, δηλαδή να κλειδώσει μια διεύθυνση
Υπάρχει διαφορά μεταξύ των αποτελεσμάτων του τρεξίματος με και χωρίς κλείδωμα:
Μετά το κλείδωμα: η τιμή του i θα μειωθεί ένα προς ένα, δεν θα υπάρχουν άλματα, δεν θα υπάρχει επαναλαμβανόμενη έξοδος, μέχρι την τιμή 0.
Χωρίς κλείδωμα: η έξοδος τιμής του i θα μεταπηδήσει, η ασυνεχής μείωση και μπορεί επίσης να έχει έξοδο τιμής -1.
Αιτία: Μετά την προσθήκη ενός κλειδώματος, μόνο ένα νήμα μπορεί να εκτελέσει τον κώδικα στην κλειδωμένη περιοχή κάθε φορά και και τα δύο νήματα εκτελούνται με τη σειρά, επομένως δεν θα υπάρχει διακοπή εξόδου. |