Да, это правильное использование замков (в отличие от других механизмов блокировки).Однако некоторые могут утверждать, что следует использовать другую межпроцессную блокировку типа, например, именованный мьютекс, потому что, если несколько процессов могут быть запущены, они могут одновременно получить доступ к оборудованию, что может повредить данные.
«Держите замки крепкими» обычно означает, что вы должны быть уверены, что не выполняете ненужную обработку, удерживая блокировку.Например, если вам нужно выделить некоторое пространство для размещения данных, это обычно можно сделать вне блокировки.Второе правило - избегать тупиковых ситуаций.Например, если внутри действия, переданного в DoSomething
, код должен был заблокировать другую блокировку , а в некоторых случаях другой код должен был получить доступ к этой блокировке перед вызовом DoSomething
, если эти два пути кодаесли бы он работал одновременно, вы бы зашли в тупик (один удерживал этот замок и ждал другого, а другой удерживал другой замок и ждал этого).Если разработчики, использующие этот код, имеют дисциплину, чтобы никогда не брать никаких блокировок или выполнять ненужную обработку в указанном действии, все будет работать нормально, но это большая проблема, если.
Если это возможно, было бы гораздо безопаснее (лучше) кодировать все возможные операции, которые можно выполнять на канале, таким образом, чтобы все блокировки были скрыты внутри реализации и не вызывали внешний кодсделаны, пока замок удерживается.Таким образом, никто, кто не понимает внутренности, не сможет написать код, вызывающий тупик.