retry
に達するSTM
という式を実行すると、スレッドがブロックされ、エントリが変更されるとトランザクションが再度実行されます。Haskell STMと再試行
しかし、私は思っていた:
我々は再試行につながるという特定のブランチでは、実際に使用されていない、STM変数を読めば、それは再びトランザクションを実行しようとする更新のでしょうか?
スレッドはブロックされていますが、実際にはブロックされていますか?他の潜在的に待機している操作で使用するためにスレッドプールでリサイクルされていますか?
私はあなたの最初の質問に従うことに苦労しています。例を提供するのはどうですか?あなたの2番目の質問については、スレッドがブロックされています。しかし、Haskellスレッドは実際にはデフォルトでは緑のスレッドなので、多くのスレッドは1つのシステムスレッドで実行されます。これは、他のHaskellスレッドがブロックされている間も、そのスレッドが引き続き作業を実行できることを意味します。 –
第1の質問:2つの変数を読み込んでいますが、トランザクションは実際には1の値に依存します。 – nicolas
私は緑のスレッドが最初の近似の実装について本当に気にしないほど効率的だと思います – nicolas