C # Блокировка агрегата идет не так - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь заблокировать инкрементный "счетчик" в методе Countrange.Счетчик должен рассчитывать при некоторых условиях в потоках.Если я завершаю потоки по порядку (не параллельно), я получаю правильное значение счетчика снова и снова, но когда я пытаюсь заблокировать, как я делаю в программе, это все еще не является потокобезопасным, потому что я получаю различные значения счетчика, когда я запускаюпрограмма несколько раз.

{
    class Program
    {
        static int e, p, b, m;
        static int counter = 0;
        static int lok = 0;
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            string[] inputs = input.Split(' ');
            counter = 0;
            p = Convert.ToInt32(inputs[4]);
            e = Convert.ToInt32(inputs[2]);
            b = Convert.ToInt32(inputs[1]);
            m = Convert.ToInt32(inputs[3]);
            Thread[] ts = new Thread[p];
            for (int t = 0; t < p; t++)
            {
                ts[t] = new Thread(countrange);
            }
            for (int t = 0; t < p; t++)
            {
                ts[t].Start(t);
            }
            for (int t = 0; t < p; t++)
            {
                ts[t].Join();
            }
            Console.Write(counter);
            //Console.ReadKey();
        }

        public static void countrange(object mt)
        {

            int to = eind * (((int)mt + 1) / p) + verdeler + b;
            int from = eind * (((int)mt) / p) + verdeler - a + b;

            for (int i = from; i < to; i++)
            {

                    proef = proef + moduler * keer;

                }

                {
                    if (proef % m == 0)
                        lock (mt)
                        {
                            counter++;
                        }

                }
            }


        }
    }
}

1 Ответ

0 голосов
/ 29 ноября 2018

Я сделал блокировку статической, теперь она работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...