Sobes.tech
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()
}

Η επιλογή του τύπου κλειδώματος εξαρτάται από την εργασία και τις απαιτήσεις απόδοσης και ασφάλειας.