Weiterführende Literatur:
Ich möchte einige meiner Artikel vorstellen, die sich für allgemeine Synchronisationsprimitive interessieren und sich mit Monitor, Verhalten, Eigenschaften und Kosten von C # -Sperranweisungen befassen, abhängig von bestimmten Szenarien und der Anzahl der Threads. Es ist speziell an CPU-Verschwendung und Durchsatzzeiten interessiert, um zu verstehen, wie viel Arbeit in mehreren Szenarien durchgesetzt werden kann:
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
Ursprüngliche Antwort:
Ach je!
Es scheint, dass die richtige Antwort, die hier als DIE ANTWORT gekennzeichnet ist, von Natur aus falsch ist! Ich möchte den Autor der Antwort respektvoll bitten, den verlinkten Artikel bis zum Ende zu lesen. Artikel
Der Autor des Artikels von 2003 Artikeln wurde die Messung auf Dual - Core - Maschine nur und in dem ersten Mess Fall er gemessen mit einer einzigen Gewindesicherung nur und das Ergebnis war etwa 50 ns pro Schloss Zugang.
Es sagt nichts über eine Sperre in der gleichzeitigen Umgebung aus. Wir müssen also den Artikel weiter lesen und in der zweiten Hälfte hat der Autor das Sperrszenario mit zwei und drei Threads gemessen, was den Parallelitätsstufen der heutigen Prozessoren näher kommt.
Der Autor sagt also, dass bei zwei Threads auf Dual Core die Sperren 120 ns kosten und bei drei Threads 180 ns. Es scheint also eindeutig von der Anzahl der Threads abhängig zu sein, die gleichzeitig auf die Sperre zugreifen.
Es ist also einfach, es sind keine 50 ns, es sei denn, es ist ein einzelner Thread, bei dem die Sperre unbrauchbar wird.
Ein weiteres zu berücksichtigendes Problem ist, dass es als durchschnittliche Zeit gemessen wird !
Wenn die Zeit der Iterationen gemessen würde, gäbe es sogar Zeiten zwischen 1 ms und 20 ms, einfach weil die Mehrheit schnell war, aber nur wenige Threads auf die Prozessorzeit warten und sogar Millisekunden lange Verzögerungen verursachen.
Dies sind schlechte Nachrichten für jede Art von Anwendung, die einen hohen Durchsatz und eine geringe Latenz erfordert.
Und das letzte zu berücksichtigende Problem ist, dass es innerhalb des Schlosses zu langsameren Vorgängen kommen kann, und dies ist sehr oft der Fall. Je länger der Codeblock innerhalb des Schlosses ausgeführt wird, desto höher ist die Konkurrenz und die Verzögerungen steigen himmelhoch.
Bitte beachten Sie, dass bereits seit 2003 mehr als ein Jahrzehnt vergangen ist, dh nur wenige Generationen von Prozessoren, die speziell für den vollständigen gleichzeitigen Betrieb entwickelt wurden und das Sperren ihre Leistung erheblich beeinträchtigt.