Junior — Middle
Πώς διασφαλίζεται η ασφάλεια πρόσβασης σε έναν πίνακα σε ένα περιβάλλον πολλαπλών νημάτων;
sobes.tech AI
Απάντηση από AI
Για την εξασφάλιση της ασφάλειας πρόσβασης σε έναν πίνακα σε περιβάλλον πολλαπλών νημάτων στο iOS (Swift), συνήθως χρησιμοποιούνται μηχανισμοί συγχρονισμού για την αποφυγή καταστάσεων αγώνα και καταστροφής δεδομένων.
Κύριες προσεγγίσεις:
- Αποκλεισμός πρόσβασης μέσω DispatchQueue
let queue = DispatchQueue(label: "com.example.arrayQueue")
var array: [Int] = []
func appendElement(_ element: Int) {
queue.sync {
array.append(element)
}
}
func getElement(at index: Int) -> Int? {
return queue.sync {
guard array.indices.contains(index) else { return nil }
return array[index]
}
}
- Χρήση NSLock ή άλλων primitive κλειδώματος
let lock = NSLock()
var array: [Int] = []
func appendElement(_ element: Int) {
lock.lock()
array.append(element)
lock.unlock()
}
- Χρήση ταυτόχρονου queue με barriers (Dispatch barriers) για ανάγνωση/εγγραφή
Αυτό επιτρέπει την παράλληλη ανάγνωση, αλλά η εγγραφή μπλοκάρει την ουρά.
Το κλειδί είναι να ελέγχετε την πρόσβαση στον πίνακα μέσω συγχρονισμού, ώστε να αποφεύγονται ταυτόχρονες αλλαγές από διαφορετικά νήματα.