从多个线程更新单个值

时间:2013-07-15 07:38:23

标签: c# multithreading

我有一个反击 - 让我们称之为:ItemsRemaining。

我会有一个动态数量的线程,但是对于这个例子,假设我有10个线程......

每个线程都将包含一个循环,并且循环中的每个迭代都执行一个工作单元,然后应该更新GUI线程上的ItemsRemaining变量。这可能是私有int,或者甚至可能是控​​制值。

如何从多个线程调用中准确更新此ItemsRemaining?虽然同时没有从锁定中获得太大的性能影响?

4 个答案:

答案 0 :(得分:2)

您应该检查Interlocked类中的方法。

答案 1 :(得分:0)

我认为锁定是同步两个线程的最快方法。如果你已经在使用它,你应该很好。

答案 2 :(得分:0)

您可以使用简单锁定或Interlocked.Decrement。如果你的任何线程值得创建,我认为锁定任何东西都不会影响性能。

答案 3 :(得分:0)

如果要在变量的每个增量上更新UI,则调用使用线程中的Control.Invoke(Winforms)或Dispatcher.Invoke(WPF)更新UI的方法 - 并增加在更新UI之前,该方法本身的int变量。这样就不需要锁定,因为对变量的修改会在UI线程上自动同步。

如果您不想让工作线程等待UI更新完成,您还可以使用BeginInvoke变体。