作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是作为 sleeping barber problem 的解决方案提出的。 . (归于 CGrand,但我找到了引用 here )
我很好奇 dosync
阻止 enter-the-shop
.我的理解是这是一笔交易,所以empty-seats
由于 STM,将保持一致。但是,不存在send-off
的可能性吗?如果事务被重试,会被多次调用?如果不是,为什么,如果是,如何解决?
更新
虽然公认的答案仍然正确,但我刚刚注意到的一件事是可以进行优化——没有理由调用 send-off
交易里面。一旦你有了交易的返回值,就可以事后发送,如下:
(if (dosync
(when (pos? @empty-seats)
(alter empty-seats dec)))
(send-off barber cut-hair n)
(debug "(s) turning away customer" n))
最佳答案
引用 clojure.org page on agents :
Agents are integrated with the STM - any dispatches made in a transaction are held until it commits, and are discarded if it is retried or aborted.
send-off
当(/如果)STM事务成功提交时,只会运行一次。
关于clojure - 这个 clojure sleep 理发师解决方案中是否存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781933/
我在线程同步方面遇到问题。我正在尝试用不同的方法来解决 sleep 理发师问题。当我运行代码时,线程以完全模糊的方式运行。当我向线程添加连接时,进程一一运行,这是不需要的。我知道 sleep 理发师问
我是一名优秀的程序员,十分优秀!