我在IIS下运行的ASP.NET网页使用包含单例类的公共程序集。我应该在单例上实现一个锁定机制,使其具有线程安全性吗?或者,与Web服务器的任何连接是否都使用相同的单例实例?
希望我能连贯地问这个问题。
答案 0 :(得分:2)
如果它是一个静态单例......不,它不是线程安全的。它在所有正在攻击该应用实例的线程中共享(因此多请求将共享它)。
但是,您正在使用它可能不一定需要线程安全。
答案 1 :(得分:2)
.NET单例的常用模式为每个应用程序域创建一个实例。 asp.net中的通常情况是,您有多个线程在同一个应用程序域中运行。这意味着你可以让多个线程同时在你的单例中运行代码。
如果它是线程安全的,你必须检查单例并确定(尽可能 koffreflectorkoff )。如果它保留并修改共享资源,或者它封装了存储在方法调用之间的某种状态,请小心。
您可能希望将单例包装在第二个单例中,该单例使用锁定,然后将其调用委托给您无法控制的单词。这样你就可以更好地控制锁定,而不是使用单个锁来阻止对单例的每次调用。它还可以为您提供集中线程代码位置的好处......
答案 2 :(得分:0)
在.NET中可以实现一个 Thread-safe Singleton没有使用锁。