У меня есть метод, который просто увеличивает целочисленное значение (i ++)
public void Calculate()
{
for(int i=0;i<1500;i++)
y++;
}
Где Y - переменная класса Int.
Thread thr1 = new Thread(Calculate);
thr1.Start();
Thread thr2 = new Thread(Calculate);
thr2.Start();
Thread thr3 = new Thread(Calculate);
thr3.Start();
Thread thr4 = new Thread(Calculate);
thr4.Start();
При запуске 4 Threads с Calculate Delegate значение Y должно быть 6000, если Y начинается со значения 0
Но не всегда он становится 6000, иногда я получаю 5993 или 6003, поэтому бывают случаи, когда это значение не является тем, которое по логике должно быть.
Так что есть какое-то решение, чтобы предотвратить это, я не хочу блокировать Y, когда поток увеличивается, так есть ли способ установить параллельное значение переменной из нескольких потоков?
РЕДАКТИРОВАТЬ : он работает с Interlock.Increment();
, но он замедляет алгоритм, поэтому то, что делает его правильно и быстрее, это:
int i = 0;
int j = 0;
for (i = 0; i < 1500; i++)
{
j++;
this.label1.Text = y.ToString();
}
lock(y)
{
y += j;
}