Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.Threading;
- namespace Recetas.CSharp.Cap04.R0411
- {
- public sealed class RendimientoInterlocked
- {
- // Objeto para bloqueo en lock:
- private static Object bloqueo = new Object();
- // Variable a sincronizar:
- private static int sincVariable = 0;
- // Iteraciones
- private static int iteraciones = 10000000;
- public static void Main()
- {
- // Creación cronómetro:
- Stopwatch cron1 = Stopwatch.StartNew();
- // Uso de lock en un ciclo de 10000000 iteraciones:
- for (int i = 1; i <= iteraciones; ++i)
- {
- lock (bloqueo)
- {
- ++sincVariable;
- }
- }
- cron1.Stop();
- // Creación de otro cronómetro:
- Stopwatch cron2 = Stopwatch.StartNew();
- // Uso de Interlocked.Increment:
- for (int i = 1; i <= iteraciones; ++i)
- {
- Interlocked.Increment(ref sincVariable);
- }
- cron1.Stop();
- // Muestra resultados en pantalla:
- Console.WriteLine ("\nValor total de `sincVariable`: {0}", sincVariable.ToString());
- Console.WriteLine ("\tTiempo de uso de lock: {0}",
- ((double) (cron1.Elapsed.TotalMilliseconds * 1000000) / iteraciones).ToString("0.00 ns")
- );
- Console.WriteLine ("\tTiempo de uso de Interlocked.Increment: {0}\n",
- ((double) (cron2.Elapsed.TotalMilliseconds * 1000000) / iteraciones).ToString("0.00 ns")
- );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement