2012-04-11 5 views
11

Wird der "else" -Teil von orElse aufgerufen, wenn eine Transaktion aufgrund einer anderen Transaktion, die auf eine TVar geschrieben wurde, erneut gelesen wurde oder nur, wenn retry explizit aufgerufen wird?Haskell: TVar: orElse

Antwort

10

Wenn Sie

a b OrElse

dann b wird nur ausgeführt, wenn retry explizit in a genannt wird. Andernfalls würde orElse im Wesentlichen nicht deterministisch werden. (Die erneute Ausführung von Transaktionen, die von der STM-Laufzeit ausgeführt wird, ist transparent und sollte das Ergebnis einer Berechnung nicht beeinflussen.)