Gua*_*apo 3 c# locking .net-4.0 task winforms
我目前有一个函数,它将根据数据量创建函数的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;
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,锁定是更新变量的好方法还是有更好的方法?
如果你只是递增值,你可以使用Interlocked.Increment安全地增加它而不需要lock.
如果你想批量处理它,Interlocked.Add将允许你一次性将你的线程局部总值添加到计数器,同样没有锁定.
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |