在 golang 中是否存在存在竞争条件的情况?

问题描述 投票:0回答:1

假设我有一段代码,该代码在布尔值上存在竞争条件,该布尔值只能从 true 变为 false。例如这样的事情:

ok := true for { go func() { if !ok { return } if !doSomething() { ok = false } }() }
我们这里有一个竞争条件,其中 ok 被分配给 false,但原则上我们不关心 

which goroutine 首先更改变量,因为任何一个都会有相同的效果。我们也不关心某些 goroutine 在写入 false 时是否读取 true 值,因为在任何一种情况下程序都不会出现意外行为。

所以原则上根据我的推理,这应该没问题,但我记得总是读到所有数据争用都应该得到解决。这是一个一般规则(例如,它会导致未定义的行为),还是有时可以接受?

multithreading go boolean race-condition goroutine
1个回答
0
投票
不,当然不是。

除非您考虑损坏的代码和程序员错误“好吧”。

© www.soinside.com 2019 - 2024. All rights reserved.