【问题标题】:Can this scenario lead to a race condition?这种情况会导致竞争条件吗?
【发布时间】:2014-09-15 18:17:07
【问题描述】:

假设我们有一个使用邮箱的消息传递系统。当发送到一个已满的邮箱或尝试从一个空的邮箱接收时,进程不会阻塞,相反,它会返回一个错误代码。该过程通过一遍又一遍地再次尝试来响应错误代码,直到它成功。这会导致竞争条件吗?

【问题讨论】:

  • 无延迟地循环,等待某个事件发生(例如邮箱中有消息),称为“忙等待”。这不是竞争条件,但仍然不可取。

标签: race-condition


【解决方案1】:

首先,我建议查看race condition 的含义。

如果邮箱系统在接收/检索电子邮件时处理“原子性”,则不存在竞争条件。您的应用可能会一直循环尝试检索消息,但这不是竞争条件。

现在,让我们假设邮箱系统不使用任何类型的锁定机制。如果同时,您正在尝试阅读是否存在新邮件,新邮件正在到达邮箱,您可能会阅读未完成的邮件,因为仍在到达。

在最好的情况下,您会收到未完成的消息,但通常由于指针无效等原因会发生崩溃。

【讨论】:

    【解决方案2】:

    您描述的情况本身不会导致比赛,尽管您为响应错误而采取的行动可能会,例如将“检测到此邮箱为空”消息推送到空邮箱。从两个线程执行此操作,您很容易得到两封邮件。

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 1970-01-01
      • 2022-09-23
      • 2020-08-25
      • 2021-09-03
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多