gpt4 book ai didi

java - 短路评估可以触发竞争条件吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:15 24 4
gpt4 key购买 nike

我喜欢代码高尔夫。鉴于CVE-2016-5195 ,我想知道我的任何“golfed”代码是否可以触发竞争条件。

假设我们有两个函数,都返回一个 boolean 值,我们正在初始化一个名为 result 的 boolean 变量:

result = foo() || bar();

在理想世界中,我们有两种情况:

  1. foo 返回 true。不要调用barresult 等于 true[短路场景]
  2. foo 返回 false调用bar()result 等于 bar 返回的内容。

我的问题:是否会出现违反短路评估的情况,并且尽管 foo 返回 仍会调用 bar >true,或者更糟的是,barfoo 被调用之前被调用,也许是因为多线程?如果是这样,您能否提供一段代码来触发此类行为?

您的答案可能与此语法在其中有效的任何语言有关,尽管我认为某些语言对此类事情的要求会比其他语言更严格。

最佳答案

当一系列操作的结果取决于它们的执行顺序时,就会出现竞争条件。

C++ 中的 &&|| 运算符保证从左到右求值,如果第一个运算符不求第二个运算符分别是假/真。由于操作顺序是有保证的,foo 操作和bar 操作之间不存在竞争条件。不过,每个中的操作之间仍可能存在竞争条件。

违反上述保证的代码不是 C++ 代码,同样符合标准的 C++ 编译器永远不会发出违反这些保证的代码。

关于java - 短路评估可以触发竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40544179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com