我试图松散地为我的网站实现自己的“锁定”或“互斥锁”。为此,我使用isLocked
属性让服务器知道是否有其他用户正在运行更新。我想初始化它的值一次,但我不知道我的解决方案是否会这样做。下面是完整的例子:何处初始化MVC模型中的静态属性并执行锁定
在模型:
public abstract class BaseModel
{
public static bool isLocked = false;
}
当我使用的属性:
public class OtherModel : BaseModel
{
public OtherModel() : base()
{
if (/*condition &&*/ !BaseModel.isLocked)
{
BaseModel.isLocked = true;
//update
BaseModel.isLocked = false;
}
}
}
将服务器初始化isLocked
一次(第一次BaseModel被实例化)或我需要在Global.asx文件中设置其值吗?
编辑:This was shared by @Michael更详细地解释了解决方案。
@ christo8989 - 你的更新不会改变任何东西..你仍然有竞争条件,你仍然需要使用原子锁定操作。 – 2015-01-26 23:25:17
我明白了。我会试试这个。谢谢! (我重新编辑修改名称......) – christo8989 2015-01-26 23:25:27
@ christo8989 - 你只需要小心,你锁定一个静态对象,如果你不这样做,并锁定一个本地的东西,那么你只会锁定一个只有该线程才能看到的变量,并将打败目的。 – 2015-01-26 23:26:46