下面两种锁定方式将产生什么区别。我对这种锁定方式的使用意义感到怀疑,并希望了解其内部工作原理。
public static int DoJob(this MapperClass Mapper)
{
object MyLock = new object();
lock (MyLock)
{
if (Mapper.MapId != null)
{
//Do some Work
}
else
{
//Do something else
}
}
}
调用方法:
private void InvokeDoJob(List<MapperClass> Mapper)
{
Mapper.ForEach(item =>
{
item.DoJob();
});
}
而这个InvokeDojob正在调用多线程模型。
建议我如何进行锁定,这是正确的方法。
下面的代码也有什么不同。我看到锁定仅在类级别完成。
class Department
{
Object thisLock = new Object();
int salary;
Random r = new Random();
public Department(int initial)
{
salary = initial;
}
int Withdraw(int amount)
{
lock (thisLock)
{
if (salary >= amount)
{
//Console.WriteLine("salary before Withdrawal : " + salary);
return amount = 10;
}
else
{
return amount = 20;
}
}
}
}