gpt4 book ai didi

c++ - 这会导致事件驱动编程中的竞争条件吗?

转载 作者:行者123 更新时间:2023-11-28 01:03:25 24 4
gpt4 key购买 nike

我正在离散模拟器中编写基于代理的小型交互模拟,并开始编写一些如下所示的代码。我以前没有接触过一些事件驱动编程,但也没有真正观察到这种情况。我想知道以下代码是否会在更新 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)?有什么建议吗?

最佳答案

答案取决于您的事件传输的实现,并且在这个意义上与语言无关。

在我使用过的所有系统中,每条消息都将单独放入一个事件队列中,接收代理会按顺序从该队列中取出事件。假设您有一个生成消息的线程和一个从队列中取出消息的事件,我看不到出现竞争条件的机会。

如果您的事件队列具有某种尝试根据时间戳合并事件的智能,您将只能在接收代理中看到一个事件。我不知道这样做的通用系统(尽管某些 UI 系统可能会将两次快速鼠标单击合并为双击......但这是特定事件系统的特定行为,而不是语言/平台不可知论)。

关于c++ - 这会导致事件驱动编程中的竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com