我个人的理解同saucer(思归)兄的: "线程安全的" means multiple threads can call the same method at the same time without corrupting your data/resources我提这个问题是因为我看到在vs.net帮助中对于.net类库中的类通常会有以下的说明: “此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。”由此我产生了这样一个疑问: 对公共静态的方法应该更容易引起数据共享的冲突,从而是线程不安全的。为什么反到是这些方法可保证线程安全呢?看了大家的发言,我想是不是可以这样认为: 公共静态方法本身的“静态”性质不是它线程安全的原因。 而之所以.net中类的公共静态方法都是线程安全的是因为.net考虑到它们更容易是线程不安全的,所以在其中增加了一些手段如lock,mutex等使它们变为线程安全的了。 实例方法通常没有增加这些手段,所以不能保证线程安全。这些方法对多线程操作的数据竞争问题只有开发人员在方法外部去做保证。
不能保证就表示如果运用不当,可能会引起错误。但是有一些手段比如 Lock, Mutex,同步等等来避免错误的发生。
yarshray(saga jion) (
说法不一,那位高人才是正确的
??/
线程安全是为了避免数据竞争--数据设置的正确性依赖于多个线程修改数据的顺序。
如果不需要共享,则给每个线程分配一个私有的数据拷贝。如果数据必须共享,一定要用同步机制来保证操作的唯一性。
如果一个线程在几个线程同时执行时在逻辑上是正..的。在一个实际的水平上,把安全等级划分为3层比较方便。
· 不安全
· 线程安全--非并行
· 线程安全--多线程安全
"线程安全的" means multiple threads can call the same method at the same time without corrupting your data/resources我提这个问题是因为我看到在vs.net帮助中对于.net类库中的类通常会有以下的说明:
“此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。”由此我产生了这样一个疑问:
对公共静态的方法应该更容易引起数据共享的冲突,从而是线程不安全的。为什么反到是这些方法可保证线程安全呢?看了大家的发言,我想是不是可以这样认为:
公共静态方法本身的“静态”性质不是它线程安全的原因。
而之所以.net中类的公共静态方法都是线程安全的是因为.net考虑到它们更容易是线程不安全的,所以在其中增加了一些手段如lock,mutex等使它们变为线程安全的了。
实例方法通常没有增加这些手段,所以不能保证线程安全。这些方法对多线程操作的数据竞争问题只有开发人员在方法外部去做保证。