• [^] # Re: vs POSIX shared memory, read-only

    Posté par . En réponse à la dépêche PTT : un outil de trace pour la NPTL. Évalué à 2.

    Boucle atomique.... ??? Mais pourquoi aurait-elle besoin d'être atomique ?

    Test_and_set atomique signifie il y a 1. "avant" et 2. "après", mais pas "pendant":

    1. Avant: Si le process est suspendu par le noyau avant que le test_and_set atomique réussisse, il n'y a pas de problème puisque la ressource (le lock) n'est pas possédé.
    2. Après un test and set réussi, le lock est pris ! Donc il n'y a aucun risque qu'un autre process puisse posséder la resssource en même temps. Cet autre process devra faire de l'attente active (par définition d'un spin-lock) s'il veut posséder la ressource. S'il veut être sûr de ne pas faire d'attente active, alors il doit utiliser un syscall semaphore au lieu du spinlock.
    Mais dans le cas de Linux, les futex permettent d'éviter ce dilemne sans utiliser un sous-scheduler interne:
    "It is typically used to implement the contended case of a lock in shared memory"

    "When a futex operation did not finish uncontended in userspace, a call needs to be made to the kernel to arbitrate. Arbitration can either mean putting the calling process to sleep or, conversely, waking a waiting process"