Junior — Middle
Μπορείτε να εξηγήσετε τι είναι ένας σημαφόρος στο πλαίσιο του προγραμματισμού και του συγχρονισμού νημάτων;
sobes.tech AI
Απάντηση από AI
Ένα σημαφόρος είναι ένας μηχανισμός συγχρονισμού που χρησιμοποιείται για τον έλεγχο της πρόσβασης πολλαπλών νημάτων σε έναν κοινό πόρο.
Περιέχει έναν μετρητή που δείχνει πόσα νήματα μπορούν ταυτόχρονα να έχουν πρόσβαση στον πόρο. Όταν ένα νήμα θέλει να εισέλθει στην κρίσιμη ενότητα, προσπαθεί να "πιάσει" το σημαφόρο:
- Αν ο μετρητής είναι μεγαλύτερος από το μηδέν, μειώνεται κατά ένα και το νήμα συνεχίζει.
- Αν ο μετρητής είναι μηδέν, το νήμα μπλοκάρεται και περιμένει μέχρι ένα άλλο νήμα να ελευθερώσει το σημαφόρο.
Όταν ένα νήμα τελειώσει με τον πόρο, ελευθερώνει το σημαφόρο αυξάνοντας τον μετρητή, επιτρέποντας σε άλλα νήματα να συνεχίσουν.
Παράδειγμα χρήσης σημαφόρου σε Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // επιτρέπουμε 2 νήματα ταυτόχρονα
DispatchQueue.global().async {
semaphore.wait() // προσπαθεί να πιάσει το σημαφόρο
print("Το νήμα ξεκίνησε να δουλεύει")
sleep(2) // προσομοίωση εργασίας
print("Το νήμα τελείωσε τη δουλειά")
semaphore.signal() // ελευθερώνει το σημαφόρο
}
Έτσι, ο σημαφόρος βοηθά στον έλεγχο του αριθμού των νημάτων που εργάζονται ταυτόχρονα με έναν κοινό πόρο, αποτρέποντας συνθήκες αγώνα και διασφαλίζοντας τη σωστή λειτουργία.