Потокобезопасность, найти ошибки в коде - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем. Есть код обхода в ширину. Я хочу использовать пр этом несколько потоков, как я понимаю необходимо сделать очередь потокобезопасной (что я и сделал), но все равно появляется ошибка что очередь уже пуста, когда из нее пытаюсь удалить элемент. Примитивы многопоточности я знаю, только никогда не писал многопоточный код. Помогите пожалуйста.
        public void start()
        {
            mainQueue.Enqueue(rootState);
            lock (mainQueue.SyncRoot)
            {
                while (mainQueue.Count != 0)
                {
                    Thread newThread = new Thread(new ThreadStart(this.functionIteration));
                    newThread.Start();
                }
            }
        }
 
        private void functionIteration()
        {
//ТУт ошибка!!!!!
            State tempState = (State)mainQueue.Dequeue();
           if(..) {
                        mainQueue.Enqueue(s);
            }
        }

Решение задачи: «Потокобезопасность, найти ошибки в коде»

textual
Листинг программы
Thread newThread = new Thread(new ThreadStart(this.functionIteration(element)));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5