Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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

Αρχή λειτουργίας:

  • Αρχικά, ο μετρητής του σημαφόρου ρυθμίζεται στον αριθμό των διαθέσιμων πόρων.
  • Όταν ένα νήμα θέλει να αποκτήσει πρόσβαση, καλεί την λειτουργία waitacquire), η οποία μειώνει τον μετρητή.
  • Αν ο μετρητής γίνει μικρότερος από το μηδέν, το νήμα μπλοκάρεται, περιμένοντας την απελευθέρωση της πόρου.
  • Όταν το νήμα απελευθερώνει την πόρο, καλεί signalrelease), που αυξάνει τον μετρητή και ξεμπλοκάρει τα αναμονή νήματα.

Στο iOS, για εργασία με σημαφόρους, συχνά χρησιμοποιείται η κλάση DispatchSemaphore από το GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 σημαίνει ότι η πόρος είναι διαθέσιμη σε ένα νήμα

// Στο νήμα:
semaphore.wait()   // περιμένει μέχρι η πόρος να γίνει διαθέσιμη
// Εργασία με την πόρο
semaphore.signal() // απελευθερώνει την πόρο

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