今天看到这段代码
internal object UpdatePracownik(object employee)
{
lock (employee)
{
// rest of the code
}
return employee;
}
我想知道这是否是锁定功能访问的有效解决方案?
使用属性不会更好
[MethodImpl(MethodImplOptions.Synchronized)]
而不是这种锁?
最佳答案
嗯,这取决于。如果所有线程都通过传递相同的全局可见对象作为参数来调用此方法,那么它们都会看到相同的锁,并且不会出现问题。
如果相反,每个线程都将通过传递自己的对象来调用此方法,那么锁定是无用的,因为它们都看到不同的锁。我们必须知道调用该方法的上下文,以查看这是否安全。
使用您提出的同步方法可以将整个方法体包裹在一个lock(this)
语句中,如下所示:
internal object UpdatePracownik(object employee)
{
lock (this)
{
// code
}
}
这将保证多个线程执行的原子性,但对于您的目的来说可能过于粗粒度,通常不建议使用。
关于c# - 用函数参数对象锁定函数体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910366/