Есть ли разница между этим:
internal class MyClass
{
private readonly object _syncRoot = new Object();
public void DoSomething()
{
lock(_syncRoot)
{
...
}
}
public void DoSomethingElse()
{
lock(_syncRoot)
{
...
}
}
}
и этим:
internal class MyClass
{
[MethodImpl(MethodImplOptions.Synchronized)]
public void DoSomething()
{
...
}
[MethodImpl(MethodImplOptions.Synchronized)]
public void DoSomethingElse()
{
...
}
}
Единственное различие, которое я вижу, состоит в том, что первый подход блокирует какой-то закрытый член, тогда как второй подход блокирует сам экземпляр (поэтому он должен блокировать все остальное в экземпляре). Есть ли какой-нибудь общий совет, какой подход использовать? В настоящее время я нашел в нашем проекте два класса с похожими целями, каждый из которых был написан с различным подходом.
Изменить:
Возможно, еще один вопрос. Это:
internal class MyClass
{
[MethodImpl(MethodImplOptions.Synchronized)]
public void DoSomething()
{
...
}
}
точно так же, как это:
internal class MyClass
{
public void DoSomething()
{
lock(this)
{
...
}
}
}