.net 共享对象和多线程问题。我应该在乎吗?

.net 共享对象和多线程问题。我应该在乎吗?,.net,multithreading,.net,Multithreading,我有一个windows服务托管几个WCF服务。在我的windows服务中,我有两个具有单例行为的对象。这些对象可以通过WCF服务从外部访问。一个调用可以将一个值放入对象中,另一个调用可以检索该值 我应该关心多线程问题吗?我不会一个人开始写任何文章。但是无论如何,在访问singleton对象时,我应该执行任何锁定吗?那么访问对象的方法呢?它们不应该被标记为已同步吗 编辑这些对象不是单例对象。这些对象是使用具有单例行为的IoC创建的。是的,我认为您应该这样做。不久前也有人问过类似的问题 请看下面的

我有一个windows服务托管几个WCF服务。在我的windows服务中,我有两个具有单例行为的对象。这些对象可以通过WCF服务从外部访问。一个调用可以将一个值放入对象中,另一个调用可以检索该值

我应该关心多线程问题吗?我不会一个人开始写任何文章。但是无论如何,在访问singleton对象时,我应该执行任何锁定吗?那么访问对象的方法呢?它们不应该被标记为已同步吗


编辑这些对象不是单例对象。这些对象是使用具有单例行为的IoC创建的。

是的,我认为您应该这样做。不久前也有人问过类似的问题

请看下面的解释

,查看多线程单例


另外,看看在C#中实现单例模式的第三种方法:简单的多线程单例模式和在C#中实现单例模式的第四种方法:多线程单例模式

是的,我认为您应该这样做。不久前也有人问过类似的问题

请看下面的解释

,查看多线程单例


此外,还将介绍在C#中实现单例模式的第三种方法:简单多线程单例模式和在C#中实现单例模式的第四种方法:多线程单例模式

对服务的每个调用都是一个线程。 因此,您正在启动线程,甚至有相当多的线程

我不打算讨论我对单例等的立场。但是,当您共享可变数据时,必须考虑如何保护它免受并发访问。 如果线程a在线程b寻找某个对象时将某个对象放入其中,您可能会得到不可预知的结果

最明显的解决方案是在读写时使用锁。
查看您应该开始使用的文档。

您服务中的每个呼叫都是一个线程。 因此,您正在启动线程,甚至有相当多的线程

我不打算讨论我对单例等的立场。但是,当您共享可变数据时,必须考虑如何保护它免受并发访问。 如果线程a在线程b寻找某个对象时将某个对象放入其中,您可能会得到不可预知的结果

最明显的解决方案是在读写时使用锁。
查看您应该开始使用的文档。

如果singleton是可更改的,那么仅仅使singleton模式样板代码线程安全并没有多大帮助。如果他在做以下事情(我认为他是),他必须确保如何锁定这些reSurcessingleton.Instance.AddSome(123,“some”);Singleton.Instance.gimmome(123);如果单例是可交换的,那么仅仅使单例模式样板代码线程安全并没有多大帮助。如果他在做以下事情(我认为他是),他必须确保如何锁定这些reSurcessingleton.Instance.AddSome(123,“some”);Singleton.Instance.gimmome(123);我的一个朋友还向我指出System.Threading中的一个信号量类。你怎么认为?看起来这个类只控制对资源池的访问。如果你想从简单开始,你可以很容易地使用C#的“lock”语句。这只不过是Monitor类上的语法糖。但是,请确保不要使调用lock on的实例在singleton类之外可见,以防止自己死锁。我的一位朋友还向我指出System.Threading中的一个信号量类。你怎么认为?看起来这个类只控制对资源池的访问。如果你想从简单开始,你可以很容易地使用C#的“lock”语句。这只不过是Monitor类上的语法糖。但是,请确保不要使调用lock on的实例在singleton类之外可见,以防止自己死锁。