我正在使用C#处理两种类型的应用程序。一个是Web服务,一个是MVC3应用程序。
我对两者都有同样的问题。我正在尝试创建一个方法,在请求时,返回一个分布式节点的记录来处理。
并发问题导致这很危险。一旦进程“A”请求记录工作。如果进程“B”在数据库检查记录“A”之前请求一个,则它们可能都获得对该系统不利的相同记录。
在webservice中,我有一个名为“GetRecordToProcess”的Web方法。控制器中还有一个相应的MVC3 ActionResult可以执行相同的操作。
注意Web服务和MVC Action DONT需要彼此互斥。他们实际上是在两个不同的表上工作,但我碰巧在两个不同的项目中遇到了同样的问题。
我有一个使用Mutex的工作版本但当我调用Mutex.WaitOne这是baaaad时,进程正在运行我的CPU达到近60%。有什么方法可以做到这一点吗?这显然是一个常见的分布式计算需求,我只是不知道常见的解决方案。
答案 0 :(得分:0)
后端需要负责解决并发问题。例如,您可以创建一个CheckOut
表来跟踪当前已签出记录的人员。
增强您的Web服务,使GetRecordToRead()
返回记录的只读版本,TryGetRecordToWrite()
尝试签出记录(通过向记录添加新的签出记录) CheckOut表)如果成功则返回记录的可写版本