web-dev-qa-db-fra.com

Quelle est la différence entre les serrures de spin et les sémaphores?

Quelles sont les différences de base entre les serrures de spin et les sémaphores en action?

15
Renjith G

Les deux gèrent une ressource limitée. Je vais d'abord décrire la différence entre le sémaphore binaire (mutex) et la serrure de spin.

Spin Serrures Effectuer une attente occupée - c'est-à-dire une boucle de course:

while (try_acquire_resource ());
...
release();

Il effectue un verrouillage/déverrouillage très léger, mais si le fil de verrouillage sera préempté par d'autres qui essaieront d'accéder à la même resrouce, la seconde essaiera simplement d'acquiter une ressource jusqu'à ce qu'il soit à l'écart de la CPU Quant.

D'autre part mutex se comporter plus comme:

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

Par conséquent, si le fil essaiera d'acquérir des ressources bloquées, il sera suspendu jusqu'à ce qu'il soit disponible pour cela. Le verrouillage/le déverrouillage est beaucoup plus lourd mais l'attente est "gratuit" et "juste".

Semaphore est un verrou autorisé à utiliser plusieurs fois multiples (connus à partir de l'initialisation), par exemple 3 Les threads sont autorisés à maintenir simultaineusement la ressource mais plus. Il est utilisé par exemple dans le Producteur/Problème de consommation ou en général dans les files d'attente:

P(resources_sem)
resource = resources.pop()
...
resources.Push(resources)
V(resources_sem)
13
Maciej Piechotka

Les spinlocks sont utilisés dans un contexte d'interruption, où la sommeil n'est pas autorisée. Ils sondent dans une boucle serrée, ne faisant que rien d'autre que la ressource ne soit acquise. Principalement utilisé en ISRS, et plus sécurisé et efficace.

Les sémaphores peuvent être utilisés dans un contexte de processus, où dormir est correct.

2
Kapil

Voici mon coup rapide à une réponse: une serrure de spin et un binaire sémaphore (qui gère une ressource qui ne peut être utilisée que par une chose) est presque identique. Leur distinction est que les serrures de spin gérer le code doivent être exécutées tandis que des sémaphores binaires gèrent une sorte de ressource singulière (E.G. Heure du processeur, sortie d'affichage)

Un sémaphore régulier, cependant est capable de gérer plusieurs threads accédant à une ressource pouvant être divisée entre plusieurs, mais est limitée (par exemple la mémoire de la bande passante de réseau)

En bref, une spin-serrure est susceptible de continuer à demander à un sémaphore s'il peut utiliser une ressource. (Imaginez un enfant qui doit utiliser la salle de bain et attendre que quelqu'un d'autre ait fini.)

Sources: Introduction à la programmation des systèmes, Systèmes d'exploitation et Wikipedia

1
valbaca