Если вы хотите simple , и все методы находятся в одном классе, вы можете просто использовать [MethodImpl]
:
[MethodImpl(MethodImplOptions.Synchronized)]
public void Foo() {...}
[MethodImpl(MethodImplOptions.Synchronized)]
public void Bar() {...}
Например, методы блокируют this
; для статических методов это блокирует typeof(TheClass)
.
Как таковые, эти объекты блокировки являются общедоступными - поэтому существует удаленная (но подлинная) вероятность того, что на них может блокироваться еще один фрагмент кода. Как правило, рекомендуется создавать собственный объект блокировки:
private readonly object syncLock = new object(); // or static if needed
...
public void Foo() {
lock(syncLock) {
...
}
}
и т.д.
В стороне: любопытный факт; спецификация ECMA не определяет конкретный шаблон для [MethodImpl], даже включая пример закрытой блокировки, как «допустимый». Спецификация MS, однако, настаивает на этом / typeof.