9
votes

Quand devrais-je utiliser des sémaphores?

Quand utiliserais-on des sémaphores?

seul exemple que je peux penser est de limiter le nombre de threads accédant simultanément aux mêmes données / code ...

Tous les autres scénarios dans lesquels sémaphores seraient la meilleure solution?


2 commentaires

Connexe: Stackoverflow.com/Questtions/2350544/...


Exemple: Stackoverflow.com / Questions / 2375132 / ...


3 Réponses :


4
votes

pools de connexion.

I.e. Vous avez 20 connexions et 150 threads. Dans ce cas, vous auriez un sémaphore pour contrôler l'accès aux 20 connexions.


1 commentaires

+1: Bon exemple simple, mais je me demande s'il y a des situations d'autres situations que sémaphores serait bon pour ...



2
votes

Les sémaphores peuvent être acquis par un fil et libéré dans un autre. Les serrures ne peuvent généralement pas faire cela. J'ai utilisé cela lorsque vous enfilez une finition à l'aide d'une ressource et passe le contrôle de la ressource à enfiler B. Je devais contrôler l'ordre pour éviter les blocages dans cette situation particulière.


0 commentaires

5
votes

Les sémaphores peuvent être appropriés pour la signalisation entre les processus. Pour la programmation multithreadée, les sémaphores doivent être évités. strong> Si vous avez besoin d'un accès exclusif à une ressource, utilisez MuTex. Si vous devez attendre un signal, utilisez la variable de condition.

Même le cas le plus souvent mentionné d'un pool de ressources peut être implémenté plus simple et plus sûr avec une variable de condition qu'avec un sémaphore. Regardons ce cas. Une implémentation naïve avec un sémaphore ressemblerait à (pseudocode): p> xxx pré>

Le premier problème est que le sémaphore ne protège pas la piscine d'être accessible par plusieurs threads. Donc, une autre protection est requise. Laissez-le être un verrou: p>

acquire the lock
if the resource pool is not empty,
    take a resource out of the pool
release the lock
if the pool was empty, return


0 commentaires