我目前有一个函数会根据数据量创建一个函数的 X 个任务,我想用每个线程执行的数据量来更新一个 int 变量以显示进度条。
目前我所有的 UI 都是从一个计时器更新的,所以我不会委托(delegate)线程来更新 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在没有 lock
的情况下安全地增加它。
如果你想批量处理,Interlocked.Add将让您一次将线程本地总值添加到计数器,同样无需锁定。
关于c# - 从任务更新一个 int 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11141113/