class Lock
{
private static bool _isLocked = false;
private static object _objLock = new object();
public bool acquireLock()
{
lock (_objLock)
{
if (!_isLocked)
{
_isLocked = true;
return true;
}
else
{
return false;
}
}
}
public void releaseLock()
{
lock (_objLock)
{
_isLocked = false;
}
}
}
我有一些功能只能在单个用户中运行,如果一个用户运行它,其他用户想要运行,我只需返回它们“请稍后再试”。所以我想为这些方法实现锁定。 acquireLock返回true它们可以运行,返回false禁止它们运行。 我只是想问一下,我的代码好吗?
答案 0 :(得分:1)
您的代码容易受到异常攻击(在acquireLock和releaseLock之间)。
可能的解决方案:
IDisposable
。 你想要的是由Monitor.TryEnter(...)
提供的,如果你还想把它包起来,那就是:
class MyLock
{
private static bool _isLocked = false;
private static object _objLock = new object();
public bool Execute(Action a)
{
bool lockTaken = false;
try
{
Monitor.TryEnter(_objLock , ref lockTaken);
if (_lockTaken)
{
a();
}
}
finally
{
if (lockTaken)
{
Monitor.Exit(lockObject);
}
}
return lockTaken;
}
}