Замки не защищают объекты как таковые. Блокировки защищают другие потоки от получения той же блокировки. Таким образом, если блокировка предназначена для защиты ресурса (например, словаря), то другие потоки должны взаимодействовать и получить такую же блокировку, прежде чем получить доступ к ресурсу (словарю). Если поток игнорирует это и, тем не менее, получает доступ к ресурсу, он может столкнуться с недопустимым, переходным состоянием в словаре и в результате встретить все виды ошибок. Это относится как к операциям чтения, так и записи. Классы коллекций в .Net поставляются со свойством SyncRoot, которое, как правило, является рекомендуемым объектом для использования всеми потоками, если доступ к нескольким потокам запрещен. Кроме того, как уже указывал Фредрик, существуют специализированные типы ReaderWriter , которые допускают многократное совместное чтение и единственную эксклюзивную запись. Более сложные схемы, подобные той, на которую вы ссылаетесь (избегайте операций, если ресурс ожидает слишком много потоков), довольно трудно кодировать полностью безопасным и правильным способом, поэтому лучше избегать таких сложностей и придерживаться базовых примитивов.