相关疑难解决方法(0)

具有资格的生产者消费者

我是clojure的新手,我正在尝试理解如何正确使用它的并发功能,所以任何批评/建议都值得赞赏.所以我试图在clojure中编写一个小测试程序,其工作方式如下:

  1. 有5个生产者和2个消费者
  2. 生产者等待随机时间,然后将数字推送到共享队列.
  3. 一旦队列非空,消费者应该从队列中拉出一个数字,然后在短时间内休眠以模拟工作
  4. 消费者应该在队列为空时阻止
  5. 生产者应该阻止队列中有超过4个项目,以防止它增长巨大

以下是我对上述每个步骤的计划:

  1. 生产者和消费者将是不真正关心他们的国家的代理人(只是零值或某事); 我只是使用代理发送一个"消费者"或"生产者"功能来做某个时间.然后共享队列将是(def队列(ref [])).也许这应该是一个原子呢?
  2. 在"producer"代理函数中,简单地(Thread/sleep(rand-int 1000))然后(dosync(alter queue conj(rand-int 100)))推入队列.
  3. 我想让消费者代理使用add-watcher观察队列的变化.虽然不确定这一点,但它会让消费者在任何变化中醒来,即使变化来自消费者拉动某些东西(可能使其变空).也许在观察者功能中检查这一点就足够了.我看到的另一个问题是,如果所有消费者都很忙,那么当生产者向队列添加新内容时会发生什么?观看的事件是否在某个消费者代理上排队或者是否消失了?
  4. 往上看
  5. 我真的不知道该怎么做.我听说clojure的seque可能有用,但我找不到足够的doc如何使用它,我的初始测试似乎不起作用(抱歉我的代码不再有了)

clojure

21
推荐指数
1
解决办法
3149
查看次数

标签 统计

clojure ×1