Junior — Middle
Μπορείς να εξηγήσεις ποιοι τύποι μπλοκαρίσματος υπάρχουν και πώς λειτουργούν στον πολυνηματικό προγραμματισμό;
sobes.tech AI
Απάντηση από AI
Στον προγραμματισμό πολλαπλών νημάτων υπάρχουν διαφορετικοί τύποι κλειδώματος που βοηθούν στην συγχρονισμό της πρόσβασης σε κοινόχρηστους πόρους:
- Μουτζέξ (Mutex) — διασφαλίζει αποκλειστική πρόσβαση σε έναν πόρο. Μόνο ένα νήμα μπορεί να αποκτήσει το mutex τη φορά.
- Αναδρομικό mutex — επιτρέπει στο ίδιο νήμα να αποκτήσει το κλείδωμα πολλές φορές χωρίς να μπλοκάρει τον εαυτό του.
- Κλείδωμα ανάγνωσης-εγγραφής (Read-Write Lock) — επιτρέπει σε πολλά νήματα να διαβάζουν ταυτόχρονα τον πόρο, αλλά η εγγραφή είναι δυνατή μόνο αποκλειστικά.
- Σήμαφορα (Semaphore) — περιορίζει τον αριθμό των νημάτων που μπορούν ταυτόχρονα να έχουν πρόσβαση στον πόρο.
- Spinlock (ενεργός αναμονή) — το νήμα ελέγχει σε βρόχο αν το κλείδωμα είναι διαθέσιμο, χωρίς να μεταβαίνει σε κατάσταση αναμονής.
Παράδειγμα χρήσης mutex σε Swift:
let lock = NSLock()
func criticalSection() {
lock.lock()
// Κρίσιμη ενότητα
lock.unlock()
}
Η επιλογή του τύπου κλειδώματος εξαρτάται από την εργασία και τις απαιτήσεις απόδοσης και ασφάλειας.