@_13th_Dragon Przestań mi wsadzać do ust to, czego nie powiedziałem...
Poza tym, co to ma wspólnego z opisanym przeze mnie problemem?
Tak jak @Afish powiedział problem pojawi się kiedy mówimy np o singletonie bez locka.
Jeśli ktoś się ze mną nie zgadza, to niech napisze test, który to udowodni, ja napisałem coś takiego:
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine("Test Start");
Parallel.Invoke(() =>
{
var numbers = new Numbers(2, 2);
var sum = SumOfNumbers(numbers);
if (sum != 4)
throw new Exception("WTF....?");
}, () =>
{
var numbers = new Numbers(5, 5);
var sum = SumOfNumbers(numbers);
if (sum != 10)
throw new Exception("WTF....?");
}, () =>
{
var numbers = new Numbers(1, 1);
var sum = SumOfNumbers(numbers);
if (sum != 2)
throw new Exception("WTF....?");
});
Console.WriteLine("Test end");
}
Console.ReadLine();
}
public static int SumOfNumbers(Numbers numbers)
{
int sum = 0;
if (numbers.NumberOne == 2 && numbers.NumberTwo == 2)
sum = 4;
if (numbers.NumberOne == 5 && numbers.NumberTwo == 5)
sum = 10;
if (numbers.NumberOne == 1 && numbers.NumberTwo == 1)
sum = 2;
return sum;
}
}
public class Numbers
{
public Numbers(int numberOne, int NumberTwo)
{
NumberOne = numberOne;
this.NumberTwo = NumberTwo;
}
public int NumberOne { get; }
public int NumberTwo { get; }
}
Potem jeszcze tak:
static void Main(string[] args)
{
Parallel.For(0, 10000, i =>
{
Console.WriteLine("Test Start " + i);
var numbers = new Numbers(2, 2);
var sum = SumOfNumbers(numbers);
if (sum != 4)
throw new Exception("WTF....?");
var numbers2 = new Numbers(5, 5);
var sum2 = SumOfNumbers(numbers2);
if (sum2 != 10)
throw new Exception("WTF....?");
var numbers3 = new Numbers(1, 1);
var sum3 = SumOfNumbers(numbers3);
if (sum3 != 2)
throw new Exception("WTF....?");
Console.WriteLine("Test end");
});
Console.ReadLine();
}