是否明智地使用WCF并发组合InstanceContextMode = Single和ConcurrencyMode = Multiple?

时间:2012-03-12 05:47:39

标签: .net multithreading wcf

如果我已经正确理解你应该实现锁定以防止并发问题,从而失去多线程的所有好处。

以下文章

http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and#Instance%20mode%20=%20Single%20and%20Concurrency%20=%20Multiple

以示例描述了这一点。但是我无法理解这是如何工作的,因为没有锁定。

谢谢&最好的问候 - 马蒂

2 个答案:

答案 0 :(得分:2)

并发问题通常只在您必须处理更改状态时才会出现。如果您正在创建一个简单地提供数据并且不负责处理状态更改的Web服务,那么此配置可能是一个不错的选择。

答案 1 :(得分:2)

锁定不会让您“失去多线程的所有好处”。

如果您编写如下代码:

lock (shared_object) 
{
    // do everything here
    return value;
}

然后是的,您刚刚导致并发应用程序变为同步(并且等待锁定的浪费线程)。但是您不必编写代码来使其成为线程安全的。

通常,只有少数关键部分实际需要锁定。例如,在链接的文章中,“i”是唯一的共享变量,因此使线程安全所需的只是使用var local_i = Interlocked.Increment(ref i);

这是一个微不足道的例子,所以当然看起来就像你没有获得任何东西一样。在现实世界的场景中,您将做一些不需要同步的事情,并且可以从并发中获益。