Junior — Middle
Μπορείτε να εξηγήσετε τι είναι ένας σημαφόρος και πώς χρησιμοποιείται για τον συγχρονισμό των διαδικασιών;
sobes.tech AI
Απάντηση από AI
Ο σημαφόρος είναι ένας μηχανισμός συγχρονισμού που χρησιμοποιείται για τη διαχείριση της πρόσβασης σε μια κοινόχρηστη πόρο σε ένα περιβάλλον πολλαπλών νημάτων ή πολλαπλών διαδικασιών. Περιέχει έναν μετρητή που δείχνει πόσα νήματα ή διαδικασίες μπορούν ταυτόχρονα να έχουν πρόσβαση στην πόρο.
Αρχή λειτουργίας:
- Αρχικά, ο μετρητής του σημαφόρου ρυθμίζεται στον αριθμό των διαθέσιμων πόρων.
- Όταν ένα νήμα θέλει να αποκτήσει πρόσβαση, καλεί την λειτουργία
wait(ήacquire), η οποία μειώνει τον μετρητή. - Αν ο μετρητής γίνει μικρότερος από το μηδέν, το νήμα μπλοκάρεται, περιμένοντας την απελευθέρωση της πόρου.
- Όταν το νήμα απελευθερώνει την πόρο, καλεί
signal(ήrelease), που αυξάνει τον μετρητή και ξεμπλοκάρει τα αναμονή νήματα.
Στο iOS, για εργασία με σημαφόρους, συχνά χρησιμοποιείται η κλάση DispatchSemaphore από το GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 σημαίνει ότι η πόρος είναι διαθέσιμη σε ένα νήμα
// Στο νήμα:
semaphore.wait() // περιμένει μέχρι η πόρος να γίνει διαθέσιμη
// Εργασία με την πόρο
semaphore.signal() // απελευθερώνει την πόρο
Έτσι, οι σημαφόροι βοηθούν στην αποφυγή συνθηκών αγώνα και διασφαλίζουν σωστή πρόσβαση στους κοινόχρηστους πόρους.