无国籍单身人士和并发

时间:2016-04-25 13:58:27

标签: c# singleton singleton-methods

我对无国籍单身人士有疑问。关于州的单身人士,我也有一个问题。

无状态单件服务是帮助实现可伸缩性的好方法。构建我维护的项目的程序员基本上说没有并发问题,因为“它只是代码”(Singleton类,即)。这意味着该类没有类级变量。这只是方法。

这是我对C#的了解有点朦胧的地方。是否存在任何可能的问题,即2个用户通过单独的Web请求同时打击无状态单例?他们可以同时以同样的方式结束吗?这甚至可能吗?如果是这样,这是否意味着他们在该方法中使用相同的局部变量?听起来像一个大混乱,所以我假设它不会发生。我假设方法调用不会被其他用户污染。

我已经向很多同事询问过此事,没有人知道答案。所以这是一个棘手的问题。

关于单身人士的问题通常是两个或更多并发用户在阅读Singleton的公共财产时是否有任何问题。我只对阅读感兴趣。是否存在某种并发异常的可能性,其中属性不在锁定块内?或者并发,同时读取是否安全?我真的不想使用lock关键字,因为这是我不需要的性能损失。

谢谢

1 个答案:

答案 0 :(得分:2)

Singleton是anti-pattern。无国籍的单身人士更糟糕。如果某些东西不能保持状态,那么甚至没有最微弱的理由让它成为一个单身人士。

无状态单例是纯粹的静态函数,来自喜欢添加模式而不考虑模式将实现什么的人。因为在这种情况下,他会注意到它什么都没有。

如果您看到无状态单例,则可以安全地删除使其成为单例的每一段代码。在类定义中添加static。完成。比以前好多了。

我认为你对多线程,单身或非单身很困惑。我建议你阅读一本好书或教程,因为这里的答案很简单。如果您有共享资源(简单示例,不是本地的变量),那么您需要在多线程环境中特别小心。

如果您的阅读频率高于写作,则使用ReaderWriterLock代替简单的lock可能会有所帮助。请参阅here