Γιατί το Pthread_cond_wait χρειάζεται mutex;
Γιατί το Pthread_cond_wait χρειάζεται mutex;

Βίντεο: Γιατί το Pthread_cond_wait χρειάζεται mutex;

Βίντεο: Γιατί το Pthread_cond_wait χρειάζεται mutex;
Βίντεο: Nikos Vertis - Giati To Metanionis / Νίκος Βέρτης - Γιατί Το Μετανιώνεις (Official Lyric Video) 2024, Νοέμβριος
Anonim

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

Σχετικά με αυτό, το Pthread_cond_wait ξεκλειδώνει το mutex;

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

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

Εκτός από τα παραπάνω, γιατί οι μεταβλητές συνθήκης χρειάζονται mutex;

ο mutex είναι χρησιμοποιείται για την προστασία του μεταβλητή συνθήκης εαυτό. Γι' αυτό εσύ χρειάζομαι κλειδώθηκε μπροστά σου κάνω αναμένω. Τότε όταν το μεταβλητή συνθήκης είναι σηματοδοτείται ή μεταδίδεται σε ένα ή περισσότερα από τα νήματα στη λίστα αναμονής θα να ξυπνήσει και το mutex θα να κλειδωθεί ξανά ως δια μαγείας για αυτό το νήμα.

Γιατί χρειαζόμαστε μεταβλητές συνθήκης;

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

Συνιστάται: