Я вызываю большой метод через несколько потоков, и было довольно сложно предотвратить тупиковые ситуации и условия гонки с использованием synclock вокруг приращения глобального поля. Метод вызывает другие методы, и мне интересно, будут ли потоки участвовать в тех других методах, которые также скованы цепью (?).Предотвращение состояния гонки во время многопоточности
Мои мысли, что если я вместо этого создам экземпляр класса, запустите поток в конструкторе, а затем создайте экземпляр объектов и их методы всеми вызовами метода в первом методе, следует избегать условий гонки.
Созданный экземпляр класса также обладает своими методами, поэтому я считаю, что методы и вспомогательные методы в экземплярированном классе никогда не должны гоняться между собой. Поэтому я считаю, что я мог бы создавать экземпляр класса много раз, а не использовать потоки, и позволить GC догнать (может быть неэффективно?).
Еще один вопрос, какая техника наилучшей практики, если вы открываете, например. 1000, и все они запускают один и тот же метод (подпрограмма), и вам нужно увеличивать глобальные счетчики и обновлять глобальные массивы в рамках этого метода? Даже если вы можете получить глобальные элементы из метода, как большинство отправляет обновления вектора массива обратно в нечто глобальное из каждого потока? – wrtsvkrfm
Я думаю, что 1000 потоков на моем ПК были бы очень плохой идеей, если это даже возможно. Сколько физических и логических процессоров имеет компьютер, на котором вы планируете запускать эту программу? –
Я решил держать вещи под контролем с помощью ThreadPool. Кроме того, использование Synclock Me ... End Synclock работает практически без проблем. – wrtsvkrfm