2

我有一个计数器——我们就叫它:ItemsRemaining。

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

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

如何从多个线程调用中准确更新此 ItemsRemaining?同时不会因锁定而对性能造成太大影响?

4

4 回答 4

2

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

于 2013-07-15T07:42:25.937 回答
0

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

于 2013-07-15T07:42:48.150 回答
0

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

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

于 2013-07-15T08:55:29.267 回答
0

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

于 2013-07-15T07:44:03.850 回答