如何确保当时只有一个用户可以执行一段代码

时间:2011-12-14 16:10:37

标签: c# asp.net .net wcf concurrency

我被要求提出一个约束,即用户不应该同时执行从ASP.Net/C# Web应用程序调用C ++非托管代码的部分代码。

我想问一下,在C#代码中放置锁定(someobject)是否在C#类库中调用PInvoke / C ++代码是否足以确保只有一个用户能够执行代码?还是有其他技术?

我可能必须将此代码作为WCF服务托管。这种方法也会起作用吗?

2 个答案:

答案 0 :(得分:5)

如果使用WCF,则可以采用ConcurrencyMode.Single,这将自动确保在一个上下文实例中的任何给定时刻只有一个线程正在执行操作。

否则你需要使用手动线程同步(如lock,mutex等)。

答案 1 :(得分:0)

在执行该代码时对变量放置一个lock()是一种方法。

An article by Joe Albahari可能会就您系统的最佳方法提供一些很好的建议。

此处还有另一个SO帖子:Can I add an attribute to a function to prevent reentry?也可能对您有帮助。

过去我曾使用[MethodImpl(MethodImplOptions.NoInlining)](请参阅MSDN) 并且它适用于同步操作。