Member 12893295 Ответов: 1

Я использую метод parallel.invoke и в котором присутствуют 2 метода, которые увеличивают общую переменную, но не увеличивают переменную


Я использую метод parallel.invoke и в котором присутствуют 2 метода, которые увеличивают общую переменную.

int cnt=0;

параллельно.вызвать(
()=>метод1,
()=>метод2
);

общественного недействительными метод Method1()
{
НКТ++;
}
общественного недействительными метода Method2()
{
НКТ++;
}

Что я уже пробовал:

Я использую Volatile для переменной
Я использовал Interlocked.increment, но не смог решить

1 Ответов

Рейтинг:
4

OriginalGriff

Когда вы показываете нам код, покажите нам, что вы на самом деле пробовали - это не будет компилироваться по большому количеству причин!

Наиболее вероятная причина, по которой он не работает, заключается в том, что cnt является локальной переменной для метода, в котором вы вызываете Parallel.Взывать.
Если вы исправите ошибки компилятора (и добавите некоторые операторы протоколирования), он будет работать просто отлично:

namespace GeneralTestingConsole
    {
    class SampleClass
        {
        static int cnt = 0;
        public static void Main()
            {

            Parallel.Invoke(
            () => method1(),
            () => method2()
            );
            Console.WriteLine(cnt);
            }

        public static void method1()
            {
            Console.WriteLine("1:{0}", cnt);
            cnt++;
            Console.WriteLine("1={0}", cnt);
            }
        public static void method2()
            {
            Console.WriteLine("2:{0}", cnt);
            cnt++;
            Console.WriteLine("2={0}", cnt);
            }
        }
    }

1:0
2:0
2=2
1=1
2