2010-09-11 4 views
0

Sur un mutex: Je demandais sur les performances de lock here et sur la performance de try_lock here.Pourquoi les performances de `try_lock` se comportent-elles toujours comme 'lock` sur un mutex?

La question à propos de try_lock a été fermée comme doublon exact à celui de lock. Cependant, je ne vois pas pourquoi try_lock doit se comporter de la même manière que lock dans toutes les implémentations de mutex possibles.

Cette question n'a pas été vraiment répondu à la discussion suivante, je mets comme une nouvelle question ici:

Pourquoi est-il comme ça? Est-ce parce qu'il n'y a qu'une seule façon possible de mettre en œuvre try_lock? (Par exemple la manière la plus naturelle.)

Répondre

1

Les performances de try_lock sur un mutex donné sont fortement liées à la mise en œuvre de lock. Si le verrouillage du mutex nécessite toujours un appel système, le try_lock nécessitera probablement également un appel système. D'un autre côté, si lock a un "chemin rapide" qui s'exécute dans l'espace utilisateur sans appel système, alors try_lock aura probablement une implémentation similaire à ce "chemin rapide". En fait, une implémentation commune de lock est fondamentalement if(!try_lock()) lock_with_system_call().

Questions connexes