私はディスクリートシミュレーターで小さなエージェントベースの相互作用シミュレーションを書いていて、次のようなコードを書き始めています。私はこれまでイベント駆動型プログラミングを行ったことがありませんが、この状況を実際に観察していませんでした。次のコードは、の値を更新しているときに競合状態につながるのではないかと思います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を出力する可能性があります)?助言がありますか?