GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la différence entre les verrous tournants et les sémaphores ?

Quelles sont les différences fondamentales entre les verrous tournants et les sémaphores en action ?

Réponse acceptée :

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

Les verrous rotatifs exécutent une attente occupée - c'est-à-dire qu'ils continuent de tourner en boucle :

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

Il effectue un verrouillage/déverrouillage très léger, mais si le thread de verrouillage est préempté par un autre qui tentera d'accéder à la même ressource, le second essaiera simplement d'acquérir la ressource jusqu'à ce qu'il soit à court de quanta CPU.

D'un autre côté, le mutex se comporte plutôt comme :

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

Par conséquent, si le thread essaie d'acquérir une ressource bloquée, il sera suspendu jusqu'à ce qu'il soit disponible pour lui. Le verrouillage/déverrouillage est beaucoup plus lourd mais l'attente est "gratuite" et "juste".

Le sémaphore est un verrou qui peut être utilisé plusieurs fois (connu à partir de l'initialisation) - par exemple, 3 threads sont autorisés à contenir simultanément la ressource, mais pas plus. Il est utilisé par exemple en problème producteur/consommateur ou en général dans les files d'attente :

P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)

Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. Quelle est la différence entre Redhat et centOS ?

  3. Quelle est la différence entre insmod et modprobe

  4. Quelle est la différence entre le mutex et la section critique ?

  5. Quelle est la différence entre adduser et useradd ?

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre $(CC) et $CC ?