【发布时间】:2011-06-23 06:48:53
【问题描述】:
如果 w3wp.exe 是负责满足 Web 应用程序的所有传入请求的进程(如果我错了,请纠正我),如果我有一个类,我们就这样称呼它为客户
public class Customer
{
public string FirstName{get;set;}
public string LastName{get;set;}
}
所以现在当在这样的代码中访问这个类时
var customer = new Customer();
在堆中创建一个实例,并且在 w3wp.exe 中运行的所有线程都可以访问客户对象的属性 FirstName 和 LastName。
那么,在这种情况下,FirstName 和 LastName 属性是否不是线程安全的?使用仅属于特定实例且线程安全的私有属性总是明智的吗?
【问题讨论】:
-
在你的场景中两个线程是否有可能获得相同的
Customer对象?例如,来自某个共享状态或静态容器? -
不。这个类位于业务层,它不是静态的或共享的。因此,如果此类作为请求的一部分被实例化,则每个实例化都在新线程上运行,因此在这种情况下,类级别的公共属性是线程安全的,因为它不是静态或共享资源。有错请指正。
-
它不一定是“新”线程,很可能是缓存线程。此缓存线程维护您的 ASP.NET 应用程序(HttpApplication 或“全局”)的一个实例。所以这个线程会带来任何可能已经存在的上下文。
标签: c# multithreading