【发布时间】:2013-07-06 10:39:42
【问题描述】:
免责声明:这可以使用MVar () 作为简单的互斥锁轻松完成。我只是好奇看看STM能不能做到。
我想以原子方式执行以下操作:
读取一些变量。
根据我刚刚阅读的内容决定要执行的 I/O。
执行 I/O。
在变量中记录结果。
具体而言,假设我想跟踪我已读取的输入字节数,并假设在消耗了一定数量的字节后我已达到 EOF。 (好吧,让两个线程同时从同一个文件中读取可能是首先要做的一件虚假的事情,但请跟我一起去......)
显然这不可能是单个 STM 交易;中间有 I/O。显然,将其视为两个不相关的交易也是错误的。 (两个线程可以看到还有一个字节的配额,并且都决定读取那个字节。)
这个问题有很好的解决方案吗?或者 STM 只是这个任务的错误工具?
【问题讨论】:
-
这能满足您的需要吗? “理发师”可能是您的阅读指针。 stackoverflow.com/questions/16933678/…
-
@DaxFohl 好吧,您可以使用 STM 通过
TChan... 将所有 I/O 请求发送到单个线程...这应该可以工作。跨度> -
似乎你已经有了一个基本的 Erlang 风格 Actor 模型解决方案的标准用例,这就是理发师通过
STM和TChan实现的。