在正在运行的线程中更改条件时可以接受的做法是什么

时间:2019-07-11 19:53:17

标签: c# multithreading synchronization

我一直在处理大量对时间敏感的任务,每个任务都会做很多工作,然后在满足条件的情况下将结果记录到文件中。问题是条件是在任务外部控制的,我想知道当更改将被许多线程读取的条件时,最可接受的做法是什么。

我已经研究过使用MSDN上提出的各种实践,例如使用读者读写器锁或将其定义为volatile,但是这些实践因不线程安全或对性能产生负面影响而广受批评。有更广泛接受,更安全的方法吗?

条件只能在主线程上更改,并且只能由任务读取,如下所示:

private void function(){
    while(true){
        data = getData()
        if(condition){
            writeToFile(data)
        }   
    }
}

private void setConditionTrue(){
    condition= true;
}

private void setConditionFalse(){
    condition=false
}

Task t = new Task(() => function())
t.Start();

欢呼

0 个答案:

没有答案