Étant donné que pthread_spin_lock est disponible, quand l'utiliserais-je et quand ne devrait-on pas l'utiliser ?
par exemple, comment déciderais-je de protéger une structure de données partagées avec un mutex pthread ou un spinlock pthread ?
Étant donné que pthread_spin_lock est disponible, quand l'utiliserais-je et quand ne devrait-on pas l'utiliser ?
par exemple, comment déciderais-je de protéger une structure de données partagées avec un mutex pthread ou un spinlock pthread ?
Le spinlock est un verrou « occupé à attendre ». Son principal avantage est qu'il maintient le thread actif et ne provoquera pas de changement de contexte, donc si vous savez que vous n'attendez que très peu de temps (parce que votre opération critique est très rapide), cela peut donner de meilleures performances qu'un mutex. Inversement, un mutex entraînera moins de demande sur le système si la section critique prend du temps et qu'un changement de contexte est souhaitable.
TL ;DR : Cela dépend.
La méthode la plus sûre avec un booster de performance est un hybride des deux : un mutex adaptatif.
Lorsque votre système a plusieurs cœurs, vous faites tourner pendant quelques milliers de cycles pour capturer le meilleur cas de faible ou de aucune contention, puis déférer à un mutex complet pour céder à d'autres threads pour de longs verrous contestés.
POSIX (PTHREAD_MUTEX_ADAPTIVE_NP
) et Win32 (SetCriticalSectionSpinCount
) ont des mutex adaptatifs, de nombreuses plateformes n'ont pas d'API de spinlock POSIX.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.