【发布时间】:2014-01-11 17:39:25
【问题描述】:
我想在 Go 中创建一个带有管理器程序的生产者/消费者。例如:我有一个5 producers, 5 consumers and manager。生产者有their own local arrays,他们遍历它们并将元素发送给经理。消费者有their own local arrays 与元素消费的信息;他们也将它们发送给经理。管理器有它own array,它存储有什么和有多少元素(例如 - 如果生产者发送1 1 2 3 1 2 0 元素,管理器数组看起来像1 3 2 1(一个 0、三个 1、两个 2 和一个3 ) 它处理生产者和消费者的请求——将一个元素放入数组(生产)或删除它(消费)。
是否可以在 Go 中制作这样的程序?我已经在 JAVA + CSP 中使用通道来发送信息,并在管理器中使用守卫来确定当生产者和消费者尝试处理相同元素时应该首先执行哪个过程(例如,生产者想要将 1 添加到管理器数组同时消费者想要消费 1)。
欢迎提供任何示例或建议,因为我找不到任何关于我想做的事情的信息。如果需要,我可以提供我的 JAVA+CSP 代码。
更新。同步怎么样(不要从空数组中获取)?例如 - 如果消费者想要使用尚不存在的管理器数组中的元素(例如,消费者想要使用“3”,但管理器没有它们中的任何一个)但生产者有这个元素,它将在几个迭代 - 如何让消费者一次又一次地检查管理器数组,直到生产者工作完成?我是否需要为消费者元素创建结构(或类)并标记它们是否被使用,或者 Go 有特定的方法来做到这一点?
【问题讨论】:
标签: concurrency go producer