Мой вопрос может звучать, как и многие другие здесь, но у него есть вкус, которого я не нашел.Раздел кода блокировки в C#
Я пытаюсь понять следующую логику
родового объекта
public class GenericClass
{
public static void DoSomething(Object lockObj)
{
lock(lockObj)
{
// do something here
}
}
}
Класс
internal class A
{
private static _aLock = new Object();
public void Do_A_Thing()
{
GenericClass.DoSomething(_aLock);
}
}
Класс B
internal class B
{
private static _bLock = new Object();
public void Do_B_Thing()
{
GenericClass.DoSomething(_bLock);
}
}
Я просто надеюсь, чтобы подтвердить, еслимое объяснение верное:
Если несколько потоков класса «A» будут пытаться одновременно получить код в методе «genericClass» «DoSomething», этот метод будет заблокирован для всех, кроме одного экземпляра класса «A». Но один экземпляр класса «B» сможет продолжить выполнение в любое время. Если класс «B» также будет иметь несколько экземпляров, они не будут вмешиваться в блокировки класса «A».
Правильно ли это на основании того, что вы видите выше?
Да ... хотя конструкция кажется немного пугающей – Yaur
У вас на самом деле есть ';' в конце 'lock (lockObj);'? Тебе не следует. Это похоже на наличие if (someCondition); {// do stuff} ': вы только применяете' lock' или 'if' к пустой инструкции, обозначенной символом'; ', а не кодовому блоку, указанному' {} '. –
Как правило, вы хотите, чтобы ваши объекты блокировки были закрытыми, так что вы знаете, что никто не может блокировать их.Передача их требует большого доверия (и знаний) вызывающего. –