假设我们有一个使用邮箱的消息传递系统。当发送到已满的邮箱或尝试从空邮箱接收时,进程不会阻塞,相反,它会返回错误代码。该过程通过一次又一次的尝试来响应错误代码,直到成功为止。这会导致竞争条件吗?
发布于 2014-03-03 13:48:00
首先,我建议回顾一下race condition是什么意思。
如果邮箱系统在接收/检索电子邮件时处理“原子性”,则不存在竞争条件。你的应用程序可能会不断循环,试图检索一条消息,但这不是竞争条件。
现在,让我们假设邮箱系统没有使用任何类型的锁定机制。如果在同一时间,您正在尝试阅读新邮件是否存在,新邮件是否正在到达邮箱,您可能会阅读未完成的邮件,因为邮件仍在发送中。
在最好的情况下,你会得到未完成的消息,但通常会因为无效的指针等原因而发生崩溃。
发布于 2014-03-03 13:48:24
你描述的情况本身不会导致竞争,尽管你对错误采取的行动可能会,例如将“检测到此邮箱为空”的消息推送到空邮箱。从两个线程做这件事,你很容易得到两封邮件。
https://stackoverflow.com/questions/22148226
复制相似问题