2009-04-07 33 views
0

在C#中,类字段表示每个线程都有自己的该对象的实例。实例字段和线程起源的安全问题

E.g.线程1将拥有自己的对象a实例,对象b也是如此。

因此,不同PC上的Web应用程序的2个用户应该在不同的线程下访问实例字段(说一个集合),对吗?

这使我乞讨的问题,为什么我需要编写代码来同步集合?如果集合是基于实例而不是共享状态的话。

是否只是在我修改其状态时可能让另一个线程试图读取集合的事实。我说“是吗”,因为这只是通过我实际编写的代码的可能情况?例如。产生一个线程来读取非同步集合,并使用原始线程写入集合。或者还有其他问题吗?

我已经把这个在初学者部分,因为这似乎是一个基本问题。

感谢

回答

2

在C#中,一个类在默认情况下没有它的每个对象的自己的实例。

类实例和线程是两个单独的构造(除非成员被标记为[ThreadStatic]或其他一些异常)。如果您创建实例,然后运行单独的线程,它将在相同的实例上工作(除非单独的线程创建它自己的对象实例)。

由于线程通常会在相同的实例上工作(为了共享数据和状态),因此您需要适当地同步它们。

如果线程永远不会共享对象的状态或实例,那么您不必担心同步。但实际上这很少见 - 通常线程正在处理某种类型的共享数据。如果每个产生的线程创建自己的对象,并且没有其他线程与它们对话,则可以忽略同步。

+0

正是我在我的理解中缺少的东西。感谢理论! – dotnetdev 2009-04-07 23:37:02