Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net IIS中的单例类是线程安全的吗?_.net_Multithreading_Iis - Fatal编程技术网

.net IIS中的单例类是线程安全的吗?

.net IIS中的单例类是线程安全的吗?,.net,multithreading,iis,.net,Multithreading,Iis,我有一个在IIS下运行的ASP.NET网页,它使用一个包含singleton类的公共程序集。我应该在singleton上实现一个锁定机制以使其线程安全吗?或者,到Web服务器的任何连接都会使用同一个singleton实例吗 希望我能有条理地问这个问题。如果它是静态单态。。。不,它不是线程安全的。它在访问该应用程序实例的所有线程之间共享(因此多个请求将共享它) 但是,您使用它的目的可能不一定需要线程安全。通常的.NET单例模式为每个应用程序域创建一个实例。asp.net中的常见情况是,在同一应用程

我有一个在IIS下运行的ASP.NET网页,它使用一个包含singleton类的公共程序集。我应该在singleton上实现一个锁定机制以使其线程安全吗?或者,到Web服务器的任何连接都会使用同一个singleton实例吗


希望我能有条理地问这个问题。

如果它是静态单态。。。不,它不是线程安全的。它在访问该应用程序实例的所有线程之间共享(因此多个请求将共享它)


但是,您使用它的目的可能不一定需要线程安全。

通常的.NET单例模式为每个应用程序域创建一个实例。asp.net中的常见情况是,在同一应用程序域中运行多个线程。这意味着您可以让多个线程同时在您的单例中运行代码

您必须检查单例并(尽您所能)确定它是否是线程安全的。如果它保留和修改共享资源,或者如果它封装了在方法调用之间存储的某种状态,请小心


您可能希望将该单例封装在第二个使用锁的单例中,然后再将其调用委托给您无法控制的单例。这样,您就可以更好地控制锁定,而不是使用单个锁来阻止对singleton的每个调用。它还将为您提供集中线程代码位置的好处…

在.NET中,可以实现
不使用锁。

-1。如果需要,这些方法将需要有锁。此链接不涉及这些细节(仅涉及如何创建singleton类本身,而不涉及其功能)。+1。这个评论不值得-1。实际上,这些方法可能需要锁,但这与单例模式本身的实现是分开的。