Есть ли разница между этим:
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)
{
...
}
}
}