我刚开始和线打交道。我知道这个理论,也了解它的主要方面,但在这个问题上我只做了一点练习。
我正在寻找一个好的解决方案(或模式,如果可用的话)对以下问题。
假设应该有一个事务组件,它包含来自队列的处理任务的线程池,这也是该事务组件的一部分。 这个池的每个线程都等待直到有一个任务要做,从队列中弹出它,处理它,然后等待下一个回合。 另外,假设有多个线程向此队列添加任务。然后,我希望这些线程挂起,直到它们的任务被处理。 如果处理某个任务,则应使已处理任务排队的线程再次运行。
ruby类Thread提供了Thread#stop和Thread#run方法。但是,我读到,如果您想要一个稳定的实现,就不应该使用这些方法。使用某种信号机制。
在ruby中,有一些类一般处理同步和线程协作,如Thread、Mutex、Monitor、ConditionVariable等。
也许ConditionVariable可以成为我的朋友,因为它允许发射信号,但我只是不确定。
您将如何实现这一点?
发布于 2013-05-24 17:19:12
Ruby提供了一个threadsafe Queue类,它将为您处理其中的一些问题:
queue.pop直到将值推送到队列为止。您可以以这种方式使用任意数量的线程来等待队列。如果您推送到队列上的事情之一是另一个队列或条件变量,那么您可以使用它来指示任务完成。
众所周知,很难对线程进行有效的推理。您可能会发现另一种更高级别的方法,比如赛洛尔,更容易使用。
https://stackoverflow.com/questions/16735229
复制相似问题