Pourquoi un pthread mutex considéré comme “plus lent” que d'une futex?

Pourquoi les mutex POSIX considéré comme plus lourd ou plus lent que futexes? Où est la surcharge en venant dans le pthread mutex type? J'ai entendu dire que pthread mutex sont basés sur les futexes, et quand incontestée, ne pas faire des appels dans le noyau. Il semble alors qu'un pthread mutex est simplement un "wrapper" autour d'un futex.

Est la surcharge simplement dans la fonction-wrapper appel et la nécessité pour le mutex la fonction "setup" le futex (c'est à dire, en gros le programme d'installation de la pile pour la pthread mutex appel de fonction)? Ou sont-il une mémoire supplémentaire de la barrière étapes avec pthread mutex?

  • Futex? Ai-je raté quelque chose dans la classe il y a 15 ans?
  • vous ne manquerez de rien à l'époque, il n'existait pas! On les retrouve dans Linux 2.6.x (développé au cours de 2.5.le développement de x de la série)
  • en fait, les mêmes types de serrures existe beaucoup plus tôt. Je crois que l'original de la DRI de verrouillage (autour de '91, SGI) a été similaire à l'actuelle futexes.
  • Avez-vous une référence pour "mutex POSIX considéré comme plus lourd ou plus lent que futexes"? Car autant que je sache, depuis plusieurs années (depuis NPTL) pthreads sur Linux ont travaillé comme vous le décrivez.
  • Juste par curiosité, si ils travaillent comme je l'ai décrit dans ma question (c'est à dire, les deux restent dans l'espace utilisateur lorsque incontestée, et les deux ont noyau des appels en cas de contestation), alors pourquoi passer par la difficulté de l'utilisation d'un futex sur un mutex?
  • BTW, il me semble que sur ce thread les gens aime vraiment le fait que j'ai répondu en suggérant une futex sur un mutex, depuis mon hypothèse était un mutex doit l'emporter, même dans le uncontended cas, faire un appel dans le noyau. J'ai remarqué que certains des affiches ont été de mentionner que sur Linux, pthread mutex et les sémaphores sont des wrappers sur futexes, ce qui pose alors la question de savoir pourquoi traiter le problème de l'utilisation d'un futex lorsque des abstractions de niveau supérieur sont facilement disponibles?
  • Autant que je sache, il n'y a pas de raison. Un "futex" est juste un Linux primitive afin de permettre une mise en œuvre efficace des mutex et les variables de condition. Maintenant que ces implémentations efficaces font partie de la bibliothèque standard, il n'y a pas de raison d'utiliser futexes directement pour autant que je sais.
  • Toute moderne, saine de la mise en œuvre de pthread mutex aura recours à un mécanisme sous-jacent qui est une des futex ou quelque chose d'à peu près équivalente. Ainsi, le "mutex ou de futex" façon que vous encadrées votre question a une fausse supposition construit en elle.
  • Merci pour l'info ... alors qu'il peut être une fausse hypothèse construite sur la question, j'ai vu d'autres threads sur S. O. établir une distinction entre les deux, de sorte que l'audition de certaines sources qu'il n'y a pas de distinction, et à partir d'autres sources qu'il y a une distinction, m'a laissé perplexe.
  • La distinction n'est pas entre les mutex et les futex. La distinction entre un mutex mis en œuvre avec futexes, et un mutex mis en œuvre avec un utilisateur de la file d'attente et les signaux (l'ancien LinuxThreads façon). Je suppose que vous pourriez aussi envisager de mutex avec pas rapide de l'espace utilisateur chemin, comme Windows mutex qui implique toujours un syscall, mais ils sont une blague, personne ne l'a jamais utilisé pour la mise en œuvre de mutex POSIX, à ma connaissance...
  • Je crois que la version Windows de pthreads utilise Win32 mutex, ainsi que le coup de pouce de threads et de C++0x threads lors de la compilation et de le lancer sous windows. S'il vous plaît corrigez-moi si je me trompe ...
  • La vraie question ici est de repérer une saine mise en œuvre de pthreads qui serait "moderne" assez pour être à l'aide de futexes de mettre en œuvre un mutex.

InformationsquelleAutor Jason | 2011-06-15