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