2014-03-28 20 views
0

我目前正在尝试解决一个基于生产者 - 消费者模型的并发编程问题。我有一个有界的缓冲区,存储以先进先出方式进入和离开缓冲区的整数值。生产者 - 消费者模型;存储缓冲区进入和退出时间

我想要做的是随机化每个对象停留在缓冲区中的时间量,在此之后它会被标记给使用者,以便从缓冲区收集此对象。

我的想法到目前为止如下:

  • 在生产者端,int被分配给每一个值。除了此int(用于标识对象),将创建一个日期戳记以存储对象放入缓冲区的时间。

  • 而在缓冲区中,将生成随机“停留”时间并添加到这个开始时间创建退出时间

  • 然后消费者类将首先搜索缓冲区中的项目,然后查找已经达到其退出时间的项目,然后使用生成的int从缓冲区中删除该对象识别哪个元素已被删除

有没有办法用一个数组来做到这一点?

我应该看看平行数组,其中一个用于存储标识每个元素的整数,还有一个用于存储入口时间的并行索引?

在这最后一种情况下,我会在缓冲区中使用2个put方法将“时间戳”分配给第二个数组中的并行索引。

+0

您可以使用阻塞队列作为有界缓冲区。像ArrayBlockingQueue (int容量),如果你不想处理低级线程同步,就像在同步的add/remove方法中使用wait()和notify()方法一样。 – Aniket

回答

1

我想你可以使用优先队列。插入时,您只需为每个元素赋予一个随机优先级。此优先权将作为您的停留时间。如果您的客户将在队列中存在元素时出队,那么这应该会给您带来相同的效果。

如果可能在队列中的元素,你只出列他们如果停留时间已经过去了,那么你可以优先(当前时间+随机停留时间)使用。在这种情况下,消费者只需在循环中检查队列头并验证优先级是否等于当前时间

0

这已经有一段时间了,但我认为值得为将来发现这个问题的任何人提供反馈!

解决方案在于有效使用时间戳;作为表示来到百货商店的顾客(包含顾客姓名,顾客入口等的设置者和获取者)的对象的一部分,当到达商店时时间戳被保存,然后由生产者随机分配一个时间戳在门口表示一个队列)在他们进入缓冲区之前。进入缓冲区后,再次从生产者记录时间并保存到客户对象。一旦进入缓冲区,第二个随机分配的延迟时间被添加到初始输入时间以表示购物时间。消费者类每5秒钟通过客户对象搜索,以查看哪些客户(如果有的话)将要离开商店。

由于时间存储在客户对象中,因此仅使用1个数组即可实现上述功能。我选择这种方法,因为它似乎更加整洁(就使用更少的代码而言)。一个2阵列的解决方案也可以工作,只是意味着更多的代码行...

希望明确的理解!

谢谢

相关问题