如何在TPL中检查变量是否已在其他线程中更改

问题描述:

我需要检查TPL程序中的变量是否已更改。例如,如果一个线程改变了一个易变的字符串变量,其他线程不需要改变它。由于变量的类型是易变的,所以其他线程可以使用它。我该怎么做?如何在TPL中检查变量是否已在其他线程中更改

+0

我觉得在TPL中并不那么简单! – MT467 2013-03-18 20:13:26

  1. volatile可能不会做你认为它的作用。不要使用它,因为它没有给你你需要的东西。
  2. 你不能找出变量是否已经改变。也许你可以添加一个bool wasChanged = false,并在变量被写入时将其设置为true。请记住为此使用适当的同步(可能是lock)。
+0

你能解释一下为什么volatile会被使用吗?我正在使用Parallel.foreach BTW – MT467 2013-03-18 20:15:31

+0

您认为它有什么作用?然后我可以说为什么不这样做:)大多数时候你只想使用锁,或者非常简单的操作互锁。 – usr 2013-03-18 20:22:24

+0

这里是场景:1.我有一个在所有线程之间共享的代理。 2.如果这个代理被阻塞,那么只有一个线程需要从ProxyQueue中取出一个代理,而不是所有的代理。为了出队我现在正在使用互斥锁,所以一次只能有一个线程可以进入函数。 – MT467 2013-03-18 20:24:05

在给定变量类型限制的情况下,使用Interlocked操作可以检查共享变量与其预期值的确切方式。

+0

用于联锁。 – 2013-06-11 21:27:03