Ваша версия «стандартного совета» была бы очень плохой - она использовала бы одну блокировку для всего AppDomain. Обычно объект блокировки - это переменная instance , а не статическая.
Теперь, что касается вашего предложения: еще худшая идея, ИМО - потому что вы не знаете, что еще будет на нем зависеть. Некоторый другой код может использовать ту же строку - и аналогично блокировать ее. Теперь предположим, что два потока получают две блокировки вместо одной. Когда вы не представляете, что к чему, вы не надеетесь избежать тупика, кроме глупой удачи. (Есть также проблема недействительности, упомянутая codeka.)
Кроме того, это начинает сбивать с толку, если значение переменной изменяется - тогда вы потенциально могли бы одновременно выполнять два потока внутри блока блокировки, чего, вероятно, вы пытались избежать.
Везде, где возможно, вы должны (IMO) блокировать то, о чем знает только ваш код. Хотя это само по себе не сделает вас тупиком свободным или безопасным, это хорошая отправная точка, так как это значительно упрощает анализ вашего кода. Нечего и говорить, что для каждого экземпляра должна быть установлена одна блокировка - вы можете создавать более тонкие блокировки, если хотите, - но, если это вообще возможно, держать их закрытыми для себя.