Мне нравится код гольфа. В свете CVE-2016-5195 мне было интересно, может ли какой-либо из моих «играющих в гольф» код вызвать условия гонки.Может ли короткое замыкание рассчитать состояние гонки?
Допустим, у нас есть две функции, оба из которых возвращают логическое значение, и мы инициализируем булеву переменную result
:
result = foo() || bar();
В идеальном мире, у нас есть два сценария:
foo
true
. Do не позвонитьbar
.result
соответствуетtrue
. [сценарий короткого замыкания]foo
false
. Do звонокbar()
.result
соответствует какойbar
возврат.
Мой вопрос: Будет ли когда-нибудь время, когда оценка короткого замыкания нарушается, и bar
называется, несмотря на foo
возвращение true
, или даже хуже, bar
вызывается перед foo
называется, возможно, из-за многопоточности? Если да, можете ли вы предоставить фрагмент кода, который может вызвать такое поведение?
Ваш ответ может быть о любом языке (языках), на котором этот синтаксис действителен, хотя я полагаю, что некоторые языки будут более строгими в отношении такого рода вещей, чем другие.
Возможно, это неявно, но вам все равно нужно это сделать: пометить язык. Помните, что C и C++ похожи на Haskell и Prolog. Без языкового тега мы не можем ответить, это спецификация языка, которая требует наблюдаемого поведения скомпилированной программы. –
@MargaretBloom Спасибо за отзыв. Могу ли я пометить его двумя языками? –
@ 彩 音 M: не следует одновременно отмечать C++ и java. Ответы могут быть очень разными. –