Существуют ли какие-либо стандарты, рекомендации или рекомендации по безопасности потоков?
программирование
Наиболее важным стандартом является обеспечение того, чтобы все статические элементы были поточно-ориентированными. Вы увидите, что все хорошо написанные API, включая библиотеку базовых классов .NET, дают такую гарантию. Для этого есть действительно веская причина. Поскольку статические члены совместно используются в AppDomain, они могут использоваться многими различными потоками, даже если вы этого даже не осознаете. В лучшем случае было бы неудобно предоставлять собственную синхронизацию для каждого доступа к статическому члену. Представьте себе, что было бы, если бы Console.WriteLine
не был потокобезопасным.
Что касается рекомендаций и руководств, существует множество устоявшихся шаблонов для параллельного программирования. Существующие шаблоны покрывают широкий спектр проблем программирования и используют множество различных механизмов синхронизации. Шаблон производитель-потребитель - один из многих известных шаблонов, который решает большой процент одновременных проблем программирования.
Чтение Создание потоков в C # Джозефом Альбахари . Это один из лучших и наиболее проверенных доступных ресурсов.
Когда я использую ключевое слово lock (C #), это означает, что мой класс поточно-ориентирован или нет?
Неа! Не существует волшебной пули, способной сделать класс потокобезопасным. Ключевое слово lock
- это всего лишь один из множества различных инструментов, которые можно использовать для обеспечения безопасности класса для одновременного доступа нескольких потоков. Но просто использование lock
ничего не гарантирует. Правильное использование механизмов синхронизации делает код потокобезопасным. Существует множество способов неправильно использовать эти механизмы.
Как оценить потокобезопасность класса? Есть ли тесты, которые будут
уверены, что класс на 100% безопасен для потоков?
Это вопрос на миллион долларов! невероятно сложно протестировать многопоточный код. Инструмент CHESS , предоставляемый Microsoft Research, является одной из попыток облегчить жизнь параллельным программистам.