Я пишу небольшую симуляцию взаимодействия на основе агента в дискретном симуляторе и начинаю писать код, который выглядит следующим образом. Раньше у меня не было событийно-ориентированного программирования, но я действительно не наблюдал эту ситуацию. Мне интересно, приведет ли следующий фрагмент кода к состоянию гонки при обновлении значения 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)? Какие-либо предложения?