Hy,
как мы все знаем, разработка многопоточного приложения - сложная задача. Тем более, что момент, когда и что блокировать, не так очевиден, ИМХО. Часто я смотрю на метод / класс, и я должен спросить себя, делюсь ли я некоторыми данными, которые могут быть изменены несколькими потоками. И когда я не уверен, что это заканчивается блокировкой () для всего блока кода.
Итак, что мне нравится знать: есть ли у вас предложения по шаблонам / правилам и т. Д. Для идентификации общих данных? Или методы, гарантирующие, что ваш код является поточно-ориентированным.
например:.
- Статические методы не должны изменять поля класса. (Если они не блокируют поле.)
- Параметры метода, относящиеся к типу ссылки, не должны передаваться "напрямую". Всегда передавайте клона.
Кстати:
Microsoft Research работает над ШАХМАТЫ . Инструмент для поиска и воспроизведения Heisenbugs в параллельных программах. Я надеюсь, что это и PLINQ улучшат разработку параллельных программ.