免责声明:这可以很容易地使用MVar ()
一个简单的互斥锁来完成。我只是好奇,看看它是否可以用 STM 完成。
我想以原子方式执行以下操作:
读取一些变量。
根据我刚刚阅读的内容决定要执行的 I/O。
执行 I/O。
将结果记录在变量中。
具体而言,假设我想跟踪我已经读取了多少字节的输入,并假装在消耗了一定数量的字节后我已经达到了 EOF。(好吧,让两个线程同时从同一个文件中读取可能首先是一件虚假的事情,但请和我一起做......)
显然,这不可能是单一的 STM 交易;中间有 I/O。显然,将其视为两个不相关的交易也是错误的。(两个线程可以看到还剩下一个字节的配额,并且都决定读取那个字节。)
这个问题有很好的解决方案吗?或者 STM 只是完成这项任务的错误工具?