我有一个计数器——我们就叫它:ItemsRemaining。
我将有一个动态数量的线程,但对于这个例子,假设我有 10 个线程.....
每个线程将包含一个循环,循环中的每次迭代都会完成一个工作单元,然后应该更新 GUI 线程上的 ItemsRemaining 变量。这可能是一个私有 int,甚至可能是一个控制值。
如何从多个线程调用中准确更新此 ItemsRemaining?同时不会因锁定而对性能造成太大影响?
我有一个计数器——我们就叫它:ItemsRemaining。
我将有一个动态数量的线程,但对于这个例子,假设我有 10 个线程.....
每个线程将包含一个循环,循环中的每次迭代都会完成一个工作单元,然后应该更新 GUI 线程上的 ItemsRemaining 变量。这可能是一个私有 int,甚至可能是一个控制值。
如何从多个线程调用中准确更新此 ItemsRemaining?同时不会因锁定而对性能造成太大影响?
您应该检查Interlocked类中的方法。
我相信锁定是同步两个线程的最快方式。如果你已经在使用它,你应该很好。
如果您要在变量的每个增量上更新 UI,则调用使用线程中的Control.Invoke
(Winforms) 或(WPF) 更新 UI 的方法 - 并在更新 UI 之前在该方法本身中增加变量。这样就不需要锁定,因为对变量的修改会通过 UI 线程自动同步。Dispatcher.Invoke
int
BeginInvoke
如果您不想让工作线程等待 UI 更新完成,您也可以使用变体。
您可以使用简单的锁或Interlocked.Decrement。如果您的任何线程首先值得创建,我认为锁定任何内容都不会影响性能。