Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τη φιλοσοφία του μηχανισμού αναγνωστών-συγγραφέων και την εφαρμογή του;

sobes.tech AI

Απάντηση από AI

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

Βασική ιδέα:

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

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

Παράδειγμα σε Swift με χρήση DispatchQueues:

let concurrentQueue = DispatchQueue(label: "com.example.readersWriters", attributes: .concurrent)
var sharedResource = [String]()

func readData() {
    concurrentQueue.sync {
        print("Ανάγνωση δεδομένων: \(sharedResource)")
    }
}

func writeData(newValue: String) {
    concurrentQueue.async(flags: .barrier) {
        sharedResource.append(newValue)
        print("Δεδομένα γράφτηκαν: \(newValue)")
    }
}

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