【问题标题】:Is is ever acceptable for there to be a race condition? [duplicate]有比赛条件是可以接受的吗? [复制]
【发布时间】:2020-08-23 21:13:18
【问题描述】:

我正在编写 go 代码,我想知道是否可以接受竞争条件。例如,只要主线程稍后会读取该值,是否可以写入主线程可能使用的 goroutine 中的变量?是否应该始终避免竞态条件,或者是否存在可以接受的情况?

【问题讨论】:

  • 竞争条件是未定义的行为。它可能“大部分”时间都有效,但如果您有数据竞争,您将失去所有保证。我不想运行一个不能保证任何东西的应用程序。
  • 如果您想要明确定义的可重现行为,请避免竞争。如果您想要具有不确定性和不可复制的行为,那么比赛会为您提供所需的东西。

标签: multithreading go race-condition


【解决方案1】:

TL;DR
竞争条件有害,可能是漏洞的原因。

什么是竞争条件?
竞争条件意味着多个线程想要相同的资源,并且获取该资源的线程的顺序取决于实际运行,因此是不确定的。


是吗总是很危险?
这就像一场赛马,不同的线程是不同的马:如果您的软件需要特定的马(线程)首先获得(资源)才能有效执行,这是一个问题 - 但是如果您不注意线程的顺序获取资源很好。


安全视角
竞争条件通常是有害的,甚至会导致漏洞,例如dirtyc0w

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2023-03-20
    • 2021-07-17
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多