避免服务器中的代码段可以同时访问

时间:2013-09-11 09:48:40

标签: c# multithreading wcf parallel-processing

我想避免在我的服务器端业务逻辑中同时访问代码片段。 我的业务类不是静态类。服务层是在wcf中实现的。任何建议?

2 个答案:

答案 0 :(得分:4)

您需要使用某种同步机制。最简单的是lock语句:

class BusinessLogic
{
    // To avoid the possibility of a deadlock, prevent external code from
    // ever acquiring this lock by making the lock target private.
    private readonly object lockTarget = new object();

    void Foo()
    {
        lock(lockTarget)
        {
            // your code here
        }
    }
}

当然,线程同步通常是一个复杂的主题,只有在考虑特定的上下文后才能达到正确或最佳的解决方案。 <{3}}命名空间中还有其他同步原语,您也应该注意这些原语。

答案 1 :(得分:1)

问题需要一点编辑才能清楚地提到你想限制并发访问的业务逻辑在哪里,它是wcf方的一部分吗?

另外wcf的并发模式你现在配置了wcf吗?

我假设你想要控制访问的代码是wcf方面的一部分,有了这个假设,因为你的类不是静态的,那么只有限制并发访问的方法是通过.net中提供的各种锁定机制。

检查锁定C#并查看哪一个最适合您的锁定需求(您需要多少线程安全性)。

也可以查看这个讨论,它会给你一些基本上你需要的方向: http://social.msdn.microsoft.com/Forums/vstudio/en-US/f82f9cd8-87d6-4a4e-9e03-5dd2d143c680/wcf-service-concurrency-lock-right-way-to-do