Sie können eine Regel aufstellen, die besagt, dass eine Klasse Code haben kann, der auf 'this' oder auf jedes Objekt sperrt, das der Code in der Klasse instanziiert. Es ist also nur ein Problem, wenn das Muster nicht befolgt wird.
Wenn Sie sich vor Code schützen möchten, der dieses Muster nicht befolgt, dann ist die akzeptierte Antwort korrekt. Aber wenn das Muster befolgt wird, gibt es kein Problem.
Der Vorteil von lock(this) liegt in der Effizienz. Was ist, wenn Sie ein einfaches "Wertobjekt" haben, das einen einzigen Wert enthält. Es ist nur ein Wrapper und wird Millionen von Malen instanziiert. Wenn Sie die Erstellung eines privaten Synchronisierungsobjekts nur für die Sperrung benötigen, haben Sie im Grunde die Größe des Objekts verdoppelt und die Anzahl der Zuweisungen verdoppelt. Wenn die Leistung wichtig ist, ist dies ein Vorteil.
Wenn Sie sich nicht um die Anzahl der Zuweisungen oder den Speicherbedarf kümmern, ist es aus den Gründen, die in anderen Antworten angegeben sind, vorzuziehen, lock(this) zu vermeiden.