using System;
using System.Threading;
namespace Recetas.CSharp.Cap04.R0411
{
public sealed class UsoClaseInterlocked
{
public static void Main()
{
// Valores enteros para demostración:
int num1 = 1111;
int num2 = 3553;
// Valores iniciales de los dos números enteros:
Console.WriteLine ("\nValor de `num1`: {0}", num1.ToString());
Console.WriteLine ("\nValor de `num2`: {0}", num2.ToString());
// Uso de `Interlocked.Decrement`:
// Equivalencia: num1 = num1 - 1;
Interlocked.Decrement(ref num1);
Console.WriteLine ("\nNuevo valor de `num1` después de Decrement: {0}", num1.ToString());
// Uso de `Interlocked.Increment`:
// Equivalencia: num2 = num2 + 1;
Interlocked.Increment(ref num2);
Console.WriteLine ("\nNuevo valor de `num2` después de Increment: {0}", num2.ToString());
// Uso de `Interlocked.Add`:
// Equivalencia: num1 = num1 + num2;
Interlocked.Add(ref num1, num2);
// Valores actualizados:
Console.WriteLine ("\nValor de `num1` después de Add: {0}", num1.ToString());
Console.WriteLine ("Valor de `num2` después de Add: {0}", num2.ToString());
// Uso de `Interlocked.Exchange`:
// Equivalencia: num2 = num1;
Interlocked.Exchange(ref num2, num1);
Console.WriteLine ("\nValor de `num1` después de Exchange: {0}", num1.ToString());
Console.WriteLine ("Valor de `num2` después de Exchange: {0}", num2.ToString());
// Uso de `Interlocked.CompareExchange`:
// Equivalencia: if (num1 == num2) num1 = 4664;
Interlocked.CompareExchange(ref num1, 4664, num2);
// Valores actualizados:
Console.WriteLine ("\nValor de `num1` después de CompareExchange: {0}", num1.ToString());
Console.WriteLine ("Valor de `num2` después de CompareExchange: {0}\n", num2.ToString());
}
}
}