刚刚遇到一篇关于消息队列的文章。我有一个服务每隔1秒运行一个进程。该过程将名为“ProcessLock”的静态布尔更改为true。然后,过程检查,看是否该变量是事实,就执行这样前:我应该使用消息队列来保证Windows服务只能在一条记录上运行吗?
if (!ProcessLock)
{
ProcessLock= true;
//dostuff
}
但是,如果这个过程是循环轮再次进入托架刚过另一个线程支架后进入,但它有前将bool更改为true,那么我们会遇到问题,因为里面的代码会在相同的记录上开始运行两次。这种情况叫什么?我确定它有一个多线程术语?
无论如何,真正的重点是我可以使用MSMQ来解决这个问题吗?什么是一般的过程?
这是'种族'状况。 – forsvarir 2011-05-05 13:02:55
您仍然可以通过上面显示的代码片段(尽管不太可能)遇到竞争状况。更好的解决方法是使用'lock(process){/ * do stuff * /}' – jp2code 2011-05-05 13:03:41