2017-06-02 1 views
0

Je me demandais juste, supposons que le PC ait des multi-coeurs. Trois threads s'exécutent dans trois cœurs différents. Le fil (T1) a acquis le verrou de spin (S) dans le noyau (C1) et le verrou acquis par T1, les threads T2 et T3 dans le noyau C2 et C3 essayant d'acquérir le verrou et attendant la libération du verrou. une fois que les déclencheurs de threads T1 verrouillent quel thread va acquérir un verrouillage T2 ou T3? Je considère la même priorité de T2 et T3, et d'attendre dans des noyaux différents en même temps.spin lock acquérant dans linux

+0

Round-Robin est le plus simple. – 0andriy

Répondre

2

Le noyau Linux utilise des verrous spin MCS. L'essentiel est que les serveurs finissent par s'ajouter à une file d'attente. Cependant, s'il y a 2 threads faisant ceci, il n'y a aucune garantie quant à qui va réussir en premier. De même, pour des verrous d'essorage plus simples où le code essaie simplement de retourner le bit «pris», il n'y a aucune garantie. Cependant, certaines caractéristiques matérielles peuvent faire en sorte que certains cœurs ont plus de facilité que d'autres (s'ils partagent le même socket).

Vous voulez lire https://www.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html

je le répète: si 2 threads différents en compétition pour une serrure, il n'y a pas d'ordre dans lequel ils garantie prendront et la recherche d'un mal est en premier lieu. Selon la stratégie utilisée pour cela,