我在一个离散模拟器中编写了一个小型的基于代理的交互模拟,并开始编写一些如下所示的代码。我之前没有一些事件驱动的编程,但并没有真正观察到这种情况。我想知道在更新msgRcvd
的值时,以下代码是否会导致竞争状态。这是否会导致事件驱动编程中的竞争条件?
// Following is the event-loop per-se
Controller {
if (...) {
SendMessage(currentTime() + 5, i,j)
SendMessage(currentTime() + 5, i,k)
}
print currentTime(), msgsRcvd
Schedule(currentTime()+1, Controller)
}
// The following function is called when an
// agent receives a message
Receive(Agent agent) {
if (...) {
msgsRcvd++ // <-- this is a global variable
}
}
我的理解是,在currentTime() + 5
两种药物在同时,因为这两个事件在相同的逻辑发生时间收到消息,所以我应该看到的消息数量为2?或者我会看到一些奇怪的竞争情况发生,并且值取决于调度程序(即它可能最终打印1或2)?有什么建议么?
+1我的印象是,这是语言不可知的,但谢谢你的澄清。我修改了我的标签,以表明我正在使用的是什么。 – Legend