Unity" ContainerControlled"单身人士和多线程方法调用

时间:2014-10-17 13:45:12

标签: c# multithreading dependency-injection singleton unity-container

我正在使用Microsoft Unity进行依赖注入(DI)。我的类基本上是静态的(在功能上但不是编码/调用约定),除了我想要DI,所以我使用Unity和Constructors来自动解析其他Unity类。

由于这是一个单例模式,多个线程可以同时执行相同的代码块吗?

即。假设我有一个Add方法,它返回一个int,并作为输入,两个整数......

多线程可以同时在同一个单例对象上调用此Add方法吗?或者因为它是同一个实例,线程是否阻止等待调用?

换句话说,调用静态方法的方法与单例实例方法之间有什么区别吗?

(我知道在单例实例方法中使用的任何共享数据必须是线程安全的)

1 个答案:

答案 0 :(得分:1)

没有区别。只有当您需要保护的 共享状态 时,线程安全才是重要的。您所描述的方法 - 简单的添加操作 - 获取调用堆栈中的所有相关上下文不需要保护,因此您可以在多线程环境中安全地使用它。

在功能和非功能区域中,实例方法调用和静态方法调用之间当然存在差异。静态方法被认为比实例方法快得多,但它们不能在多态软件设计中有效使用 - (好吧,至少不在C#中)