【发布时间】:2011-06-19 17:38:46
【问题描述】:
我有两个类 - 类“MyDerived”派生自抽象基类“MyBase”。同样PrimaryDerivedClass 也继承MyBase。
我首先创建PrimaryDerivedClass 的实例,然后创建'MyDerived' 的实例。
MyBase 有一个称为ProcessThread 的受保护方法,当创建PrimaryDerivedClass 和MyDerived 的新实例时,它的使用类似于ThreadPool.QueueUserWorkItem(ProcessThread)。现在,当我想在某些情况下停止所有线程时,我将一些布尔 volatile 变量设置为 TRUE,并且当任何其他线程找到 volatile 变量的值 = TRUE 时,它会停止处理。
当我在 MyBase 中声明“private volatile bool stopThreads”时,我没有得到预期的行为。但是,当我做到static 或public 时,我可以看到我想要实现的目标。
如果是 private volatile 会有什么问题?
抛开上述要求,我还有一个问题: 通常,我看到 volatile 变量被声明为私有的。是否有任何重要的方面通常被宣布为私有?
(我是多线程新手。)
【问题讨论】:
-
您可能希望避免 volatile:bluebytesoftware.com/blog/2010/12/04/SayonaraVolatile.aspx
-
@TrueWill:非常感谢。
标签: c# multithreading volatile