作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在Haskell轻量级线程之间进行通信。线程希望互相发送消息以进行通信和同步。
我最初是使用TMVar
来实现的,但是我刚刚意识到语义是错误的:TMVar
将在内部存储一条消息,因此将消息放置到空的TMVar
不会被阻止。仅当您将消息发布到完整的TMVar
时,它才会阻止。
谁能建议一个类似的STM
IPC构造:
BoundedChan
如果将其容量设置为0会很高兴。(而且,它不是
STM
。)
最佳答案
如果我正确地理解了您的问题,那么我认为您不会,因为事务性保证意味着事务A在提交事务B之前无法从事务B的写入中读取,此时事务B无法再阻塞。
如果您使用的是STM,则TMVar
是最接近的代码。使用IO,您可能能够构建仅在有读者可用时才能完成写入的结构(该结构可能已经存在,但我不知道)。
关于multithreading - TMVar,但是没有缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30824054/
我正在尝试在Haskell轻量级线程之间进行通信。线程希望互相发送消息以进行通信和同步。 我最初是使用TMVar来实现的,但是我刚刚意识到语义是错误的:TMVar将在内部存储一条消息,因此将消息放置到
我想要一个小操作,其中一个线程向共享状态添加一些值,而另一个线程取出该值并打印它。这是分别使用 TMVar 和 MVar 的两个版本。 TMVar 版本无法正常工作,它不断打印出第一个值。 STM第一
我已经看到 TVar 是一个简单的容器,而 TMVar 与 MVar 相同,这意味着它有一个锁等等,但在 STM monad 内。我想知道为什么这是必要的,因为 STM 的想法是让锁变得不必要。 那么
我是一名优秀的程序员,十分优秀!