我目前有一个函数,它将根据数据量创建函数的X任务,我想更新一个int变量,每个线程执行多少数据来显示progressBar.
目前我的所有UI都是从计时器更新的,所以不是从线程委托更新UI(我认为在这种情况下会更麻烦)我会更新一个变量,计数稍后会被计时器选中并更新UI.
我想知道的是,锁定是更新变量的好方法还是有更好的方法?
计时器是否能够在非常频繁地使用它时读取该变量,或者即使在更新时它仍然能够读取它?
这是一个大致的例子:
private static readonly object counterLock = new object();
int myCounter = 0;
private void FunctionExecutedByAllRunnningThreads()
{
int executed = 0;
foreach (some data)
{
//do something with this data
executed++;
}
lock (counterLock)
myCounter += executed;
}
最佳答案
What I would like to know is, would a lock be a good way to update the variable or is there a better way?
如果您只是递增值,则可以使用Interlocked.Increment在没有锁定的情况下安全地递增它.
如果要批量处理,Interlocked.Add将允许您一次性将您的线程局部总值添加到计数器,同样没有锁定.
相关文章
转载注明原文:c# – 从任务中更新int变量? - 代码日志