Sobes.tech
Junior — Middle

Ποια μέθοδος συγχρονισμού χρησιμοποιείται για την εξασφάλιση κοινής πρόσβασης σε μια μεταβλητή κατά την ανάγνωση και την εγγραφή;

sobes.tech AI

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

Για να διασφαλίσετε ασφαλή κοινή πρόσβαση σε μια μεταβλητή κατά την ανάγνωση και την εγγραφή σε iOS, συχνά χρησιμοποιούνται οι ακόλουθες μέθοδοι συγχρονισμού:

  • Αποθέματα Dispatch (GCD): οι σειριακές ουρές (DispatchQueue) επιτρέπουν την εκτέλεση λειτουργιών με σειρά, αποτρέποντας τις συνθήκες αγώνα. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε DispatchQueue.sync ή DispatchQueue.async με μια σειριακή ουρά.

  • NSLock και άλλα αντικείμενα κλειδώματος: NSLock, NSRecursiveLock, NSCondition επιτρέπουν το ρητό κλείδωμα της πρόσβασης σε έναν πόρο.

  • @synchronized (σε Objective-C): κατασκευή σύνταξης για το κλείδωμα κώδικα.

  • Ατομικές ιδιότητες: σε Objective-C, μπορείτε να δηλώσετε ιδιότητες ως atomic, αλλά αυτό δεν είναι πάντα αρκετό για πολύπλοκες λειτουργίες.

  • Κλειδώματα αναγνώστη-συγγραφέα: για παράδειγμα, pthread_rwlock_t για διαχωρισμό της πρόσβασης σε ανάγνωση και εγγραφή.

Παράδειγμα χρήσης DispatchQueue για συγχρονισμό πρόσβασης σε μια μεταβλητή:

class ThreadSafeCounter {
    private var value = 0
    private let queue = DispatchQueue(label: "com.example.counterQueue")

    func increment() {
        queue.sync {
            value += 1
        }
    }

    func getValue() -> Int {
        return queue.sync { value }
    }
}