我有一个托管多个WCF服务的Windows服务。在我的Windows服务中,我有几个具有单例行为的对象。可以从外部通过WCF服务访问此对象。调用可以将值放入对象,另一个调用可以检索此值。
我应该关心多线程问题吗?我不是自己开始任何线程。但无论如何,在访问单例对象时我应该进行任何锁定吗?访问对象的方法怎么样?它们不应该标记为同步吗?
编辑这些对象不是单例。使用具有单例行为的IoC创建对象。
答案 0 :(得分:2)
对您的服务的每次调用都是它自己的一个线程。 所以你开始创建线程,甚至很多。
我不打算讨论我对单身人士等问题的立场。但是,当你共享可变数据时, 要考虑如何保护它不受并发访问的影响。 如果线程a将某些东西放在那里而线程b正在寻找某些东西,那么你可能会得到不可预测的结果。
最明显的解决方案是使用锁定进行读写。 查看ReaderWriterLockSlim的文档,该文档可以帮助您入门。
答案 1 :(得分:1)
是,我认为你应该这样做。不久之前就提出了类似的问题。
Object that is needed throughout the application
请参阅此处了解一些解释
Implementing Singleton in C# ,查看 Multithreaded Singleton 。
同样Ist way of implementing Singleton Pattern in C#:查看在C#中实现Singleton Pattern的第三种方式:简单多线程单例模式和在C#中实现Singleton模式的第四种方式:多线程单例模式