fork download
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace Recetas.CSharp.Cap04.R0411
  5. {
  6. public sealed class UsoClaseInterlocked
  7. {
  8. public static void Main()
  9. {
  10. // Valores enteros para demostración:
  11. int num1 = 1111;
  12. int num2 = 3553;
  13.  
  14. // Valores iniciales de los dos números enteros:
  15. Console.WriteLine ("\nValor de `num1`: {0}", num1.ToString());
  16. Console.WriteLine ("\nValor de `num2`: {0}", num2.ToString());
  17.  
  18. // Uso de `Interlocked.Decrement`:
  19. // Equivalencia: num1 = num1 - 1;
  20. Interlocked.Decrement(ref num1);
  21.  
  22. Console.WriteLine ("\nNuevo valor de `num1` después de Decrement: {0}", num1.ToString());
  23.  
  24. // Uso de `Interlocked.Increment`:
  25. // Equivalencia: num2 = num2 + 1;
  26. Interlocked.Increment(ref num2);
  27.  
  28. Console.WriteLine ("\nNuevo valor de `num2` después de Increment: {0}", num2.ToString());
  29.  
  30. // Uso de `Interlocked.Add`:
  31. // Equivalencia: num1 = num1 + num2;
  32. Interlocked.Add(ref num1, num2);
  33.  
  34. // Valores actualizados:
  35. Console.WriteLine ("\nValor de `num1` después de Add: {0}", num1.ToString());
  36. Console.WriteLine ("Valor de `num2` después de Add: {0}", num2.ToString());
  37.  
  38. // Uso de `Interlocked.Exchange`:
  39. // Equivalencia: num2 = num1;
  40. Interlocked.Exchange(ref num2, num1);
  41.  
  42. Console.WriteLine ("\nValor de `num1` después de Exchange: {0}", num1.ToString());
  43. Console.WriteLine ("Valor de `num2` después de Exchange: {0}", num2.ToString());
  44.  
  45. // Uso de `Interlocked.CompareExchange`:
  46. // Equivalencia: if (num1 == num2) num1 = 4664;
  47. Interlocked.CompareExchange(ref num1, 4664, num2);
  48.  
  49. // Valores actualizados:
  50. Console.WriteLine ("\nValor de `num1` después de CompareExchange: {0}", num1.ToString());
  51. Console.WriteLine ("Valor de `num2` después de CompareExchange: {0}\n", num2.ToString());
  52. }
  53. }
  54. }
Success #stdin #stdout 0.03s 33960KB
stdin
Standard input is empty
stdout
Valor de `num1`: 1111

Valor de `num2`: 3553

Nuevo valor de `num1` después de Decrement: 1110

Nuevo valor de `num2` después de Increment: 3554

Valor de `num1` después de Add: 4664
Valor de `num2` después de Add: 3554

Valor de `num1` después de Exchange: 4664
Valor de `num2` después de Exchange: 4664

Valor de `num1` después de CompareExchange: 4664
Valor de `num2` después de CompareExchange: 4664