Quelle est la différence entre un mutex et un spinlock ?
Les deux concepts sont quasiment identiques puisque les deux sont des mécanismes de synchronisation.
Quand un thread essaye de lock un mutex, si il réussit, il prend le contrôle de ce mutex et accède aux données partagées, sinon il attend simplement son tour dans une queue.
Le spinlock diffère légèrement : quand un thread essaye de le lock alors qu'il est déjà pris ailleurs, le thread va continuer sans arrêt de réessayer de le lock jusqu'à qu'il en prenne le contrôle, d'où l'idée de "spin" car le thread recommence tout le temps. Un tel mécanisme est très consommateur de cycles de CPU et est généralement inutile sur un système mono-processeur, mais peuvent s'avérer rentable sur des systèmes multi-processeurs.
Cependant il existe également des mutex hybrides, dans les systèmes modernes, si un thread essaye de lock ce mutex et qu'il n'y arrive pas, il ne va pas se mettre en pause et attendre (comme le ferait un thread avec des mutex classiques) mais va spinlock pendant un court instant, et si après cela le mutex n'est toujours pas unlock par le thread, alors il est mis en attente.
Aucun commentaire:
Enregistrer un commentaire