Есть ли разница между этим:
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()
{
...
}
}
Единственное различие, которое я вижу, это то, что первый подход блокируется каким-то частным членом, тогда как второй подход блокируется самим экземпляром (поэтому он должен блокировать все остальное в экземпляре). Есть ли общий совет, который подходит для использования? В настоящее время я нашел два класса с аналогичной целью в нашем проекте, каждый из которых написан с различным подходом.
Edit:
Возможно, еще один вопрос. Это:
internal class MyClass
{
[MethodImpl(MethodImplOptions.Synchronized)]
public void DoSomething()
{
...
}
}
точно так же, как это:
internal class MyClass
{
public void DoSomething()
{
lock(this)
{
...
}
}
}