根据标志锁定

时间:2019-07-11 11:25:45

标签: c# multithreading if-statement locking

我想基于App配置中的flag锁定几行代码。因此,基于该flag,我是否异步运行该应用程序。因此,我需要通过检查flag来锁定几行代码的执行。所以我需要写重复的代码。下面是示例

if (flag) {
    lock(dataLock){
        //few lines of code
    }
} else {
    //repeat the above code gain here (few lines of code)
}

是否有其他方法可以保存重复的代码。

4 个答案:

答案 0 :(得分:1)

使用Monitor.Enter代替Lock(){}?使用if语句进入并退出。

答案 1 :(得分:1)

您可以从锁中甚至从else语句中调用带有外包代码的函数。这样至少可以减少您的开销和重复的代码。

if(flag==true){
    lock(dataLock){
        fewLines();
    }
}else{
    fewLines();
}

[...]

public void fewLines(){
   // put your few lines here.
}

将从锁定的上下文中运行该函数。

答案 2 :(得分:1)

if (flag)
    Monitor.Enter(dataLock);

// few lines of code

if (Monitor.IsEntered(dataLock))
    Monitor.Exit(dataLock);

答案 3 :(得分:1)

Monitor.Enter方法最好,但您也可以这样做:

Action fewLinesOfCode = () =>
{
    //few lines of code
};

if (flag)
{
    lock (dataLock)
    {
        fewLinesOfCode();
    }
}
else
{
    fewLinesOfCode();
}