Lectures complémentaires:
Je voudrais présenter quelques articles de ma part, qui s'intéressent aux primitives de synchronisation générales et qui explorent Monitor, le comportement des instructions de verrouillage C #, les propriétés et les coûts en fonction de scénarios distincts et du nombre de threads. Il s'intéresse particulièrement au gaspillage du processeur et aux périodes de débit pour comprendre la quantité de travail pouvant être effectuée dans plusieurs scénarios:
https://www.codeproject.com/Articles/1236238/Unified-Concurrency-I-Introduction
https://www.codeproject.com/Articles/1237518/Unified-Concurrency-II-benchmarking-methodologies
https: // www. codeproject.com/Articles/1242156/Unified-Concurrency-III-cross-benchmarking
Réponse originale:
Oh cher!
Il semble que la bonne réponse signalée ici comme LA RÉPONSE est intrinsèquement incorrecte! Je voudrais demander à l'auteur de la réponse, respectueusement, de lire l'article lié jusqu'à la fin. article
L'auteur de l'article de 2003 article a été mesure sur la machine Dual Core seulement et dans le premier cas de mesure, il mesure de verrouillage avec un seul fil seulement et le résultat était d' environ 50ns par un accès de verrouillage.
Cela ne dit rien sur un verrou dans l'environnement concurrent. Nous devons donc continuer à lire l'article et dans la seconde moitié, l'auteur mesurait le scénario de verrouillage avec deux et trois threads, ce qui se rapproche des niveaux de concurrence des processeurs actuels.
Ainsi, l'auteur dit qu'avec deux threads sur Dual Core, les verrous coûtent 120ns, et avec 3 threads, cela passe à 180ns. Cela semble donc clairement dépendre du nombre de threads accédant au verrou simultanément.
Donc c'est simple, ce n'est pas 50 ns à moins qu'il ne s'agisse d'un seul thread, où le verrou devient inutile.
Un autre problème à considérer est qu'il est mesuré en temps moyen !
Si le temps des itérations était mesuré, il y aurait même des temps entre 1 ms et 20 ms, simplement parce que la majorité était rapide, mais peu de threads attendront le temps des processeurs et subiront même de longs délais de quelques millisecondes.
C'est une mauvaise nouvelle pour tout type d'application nécessitant un débit élevé et une faible latence.
Et le dernier point à considérer est qu'il pourrait y avoir des opérations plus lentes à l'intérieur de la serrure et c'est très souvent le cas. Plus le bloc de code est exécuté longtemps à l'intérieur de la serrure, plus le conflit est élevé et les retards montent très haut.
Veuillez noter que plus d'une décennie s'est écoulée depuis 2003, c'est-à-dire que quelques générations de processeurs sont spécifiquement conçues pour fonctionner de manière entièrement simultanée et que le verrouillage nuit considérablement à leurs performances.