我看不到错误,也许有人可以在这里帮助我。
我有一个使用自旋锁的自定义锁(这是学校用的)
public class Spinlock : Locker
{
Boolean locked = false;
private SpinLock spinLock = new SpinLock();
public override void LockIt()
{
try
{
spinLock.Enter(ref locked);
}
finally
{
if(locked)
spinLock.Exit();
}
}
public override void UnlockIt()
{
}
}
public abstract class Locker
{
abstract public void LockIt();
abstract public void UnlockIt();
}
我得到的异常如下:
System.ArgumentException未处理
Message =在调用此方法之前,takedLock参数必须设置为false。
最佳答案
是的,这不是正确的代码。当第二个线程也进入该锁并且已经被持有时,它将失败。锁定变量必须是局部变量,以确保它具有线程亲和力。固定:
public override void LockIt()
{
bool locked = false;
try
{
spinLock.Enter(ref locked);
}
finally
{
if(locked)
spinLock.Exit();
}
}
请注意,否则该代码毫无意义,输入锁没有任何意义,然后立即再次将其退出。我认为那是您真正的家庭作业。
关于c# - 自定义锁与自旋锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18944323/