2

我刚开始使用线程。我知道理论并理解它的主要方面,但我在这个主题上只有一点练习。

我正在为以下问题寻找一个好的解决方案(或模式,如果有的话)。

假设应该有一个事务组件,它拥有一个线程池来处理来自队列的任务,这也是该事务组件的一部分。

这个池中的每个线程一直等待,直到有任务要做,从队列中弹出,处理它,然后等待下一轮。

还假设有多个线程将任务添加到此队列。然后我希望这些线程暂停,直到它们的任务被处理。

如果处理了一个任务,则应使将处理后的任务排队的线程再次可运行。

ruby 类Thread提供方法Thread#stopThread#run. 但是,我读到,如果你想要一个稳定的实现,你不应该使用这些方法。并使用某种信号机制。

在 ruby​​ 中,有一些类通常处理同步和线程协作,如ThreadMutexMonitorConditionVariable等。

也许ConditionVariable可能是我的朋友,因为它允许发出信号,但我不确定。

你将如何实现这一点?

4

1 回答 1

1

Ruby 提供了一个线程安全的Queue类来为你处理其中的一些:

queue.pop

将阻塞直到一个值被推入队列。您可以以这种方式在队列中等待任意数量的线程。如果您推送到队列中的一件事是另一个队列或条件变量,那么您可以使用它来表示任务完成。

众所周知,线程很难有效地推理。您可能会发现另一种更高级别的方法(例如赛璐珞)更易于使用。

于 2013-05-24T17:19:12.447 回答