【发布时间】:2014-09-15 18:17:07
【问题描述】:
假设我们有一个使用邮箱的消息传递系统。当发送到一个已满的邮箱或尝试从一个空的邮箱接收时,进程不会阻塞,相反,它会返回一个错误代码。该过程通过一遍又一遍地再次尝试来响应错误代码,直到它成功。这会导致竞争条件吗?
【问题讨论】:
-
无延迟地循环,等待某个事件发生(例如邮箱中有消息),称为“忙等待”。这不是竞争条件,但仍然不可取。
标签: race-condition
假设我们有一个使用邮箱的消息传递系统。当发送到一个已满的邮箱或尝试从一个空的邮箱接收时,进程不会阻塞,相反,它会返回一个错误代码。该过程通过一遍又一遍地再次尝试来响应错误代码,直到它成功。这会导致竞争条件吗?
【问题讨论】:
标签: race-condition
首先,我建议查看race condition 的含义。
如果邮箱系统在接收/检索电子邮件时处理“原子性”,则不存在竞争条件。您的应用可能会一直循环尝试检索消息,但这不是竞争条件。
现在,让我们假设邮箱系统不使用任何类型的锁定机制。如果同时,您正在尝试阅读是否存在新邮件,新邮件正在到达邮箱,您可能会阅读未完成的邮件,因为仍在到达。
在最好的情况下,您会收到未完成的消息,但通常由于指针无效等原因会发生崩溃。
【讨论】:
您描述的情况本身不会导致比赛,尽管您为响应错误而采取的行动可能会,例如将“检测到此邮箱为空”消息推送到空邮箱。从两个线程执行此操作,您很容易得到两封邮件。
【讨论】: