免責事項: これはMVar ()
、 を単純なミューテックスとして使用して簡単に実行できます。それがSTMでできるかどうか、私は好奇心だけです。
私はアトミックに次のことをしたい:
いくつかの変数を読み取ります。
今読んだ内容に基づいて、実行する I/O を決定します。
I/O を実行します。
結果を変数に記録します。
具体的に言うと、読み取った入力のバイト数を追跡し、特定のバイト数が消費された後に EOF に達したと仮定します。(OK、2 つのスレッドが同じファイルから同時に読み取れるようにすることは、おそらく最初に行うべきではないことですが、これについては私と一緒に行ってください...)
明らかに、これは単一の STM トランザクションではありません。真ん中にI/Oがあります。明らかに、それを 2 つの接続されていないトランザクションとして持つことも間違っています。(2 つのスレッドが 1 バイトのクォータが残っていることを認識し、両方がそのバイトを読み取ることを決定する可能性があります。)
この問題の良い解決策はありますか? それとも、STM は単にこのタスクに不適切なツールなのでしょうか?