Pthread队列系统

时间:2010-05-23 22:16:10

标签: c++ c pthreads

我正在研究pthreads上的任务。我是新手,从未接触过pthreads。你们中的任何人都有任何样本代码或资源,这对我的任务有帮助吗?

以下是我的作业详情。关于队列系统的pthread程序:

  

为牙科诊所的排队系统编写一个C / C ++ Pthread程序,该系统声明了一个    大小为N的整数数组,其中N是当天的最大队列数。该    pthread程序使用两个线程。

     

每当有新的牙科预约时,第一个    线程(创建者)将队列号一个接一个地放入数组中。该    第二个线程(移除器)每当从数组中删除队列号    牙医见过病人。这是以FIFO方式(先进先出)完成的。    创建者的算法如下:

     

•如果数组未满,则在其中输入一个新数字(数字从1开始      并且每次增加1,因此创建者创建队列号1,2,3等。)

     

•随机睡眠1到10秒

     

•重复

     

卸妆的算法如下:

     

•如果数组不为空,则删除其最小的队列号。

     

•随机睡眠1到10秒

     

•重复

     

您应该使用互斥锁来保护必须受到保护的内容。每个线程   应该在屏幕上打印它正在做什么(例如:“数字13被添加到队列中”,   “从队列中删除号码7”等)。该程序应该永远运行。

任何帮助将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:4)

一般情况下,首先使用pthreads,this是一个很好的网站,可能会提供超出您需要的信息(但我喜欢详细信息)。它贯穿了很多pthreads的基础知识。如果您更喜欢死树教程,this book非常好,并且如果您想要将其称为Linux API的大多数功能或核心库,那么您将获得良好的基础。这个stackoverflow question非常简洁地处理互斥锁与信号量。

最后,我喜欢this site,因为它具有Linux线程和同步功能。

希望这些能为您提供一些阅读材料。弄清楚如何处理线程,然后是如何同步它们,然后解决你的问题。

答案 1 :(得分:0)

这是典型的生产者 - 消费者问题。

有很多方法可以解决这个问题,但最简单的方法是对队列进行一次锁定,当你在生产者或消费者中添加或删除项目时,分别锁定队列,完成工作,然后解锁队列。在消费者中,处理项目,在生产者中,继续进行获取新项目的工作。

您可能希望布置数据结构,然后定义锁,具体描述锁的锁定方式,这样您就可以确保两个线程访问的所有数据都保持同步。

感谢您将此标记为作业;我希望这能让你开始朝着正确的方向前进。您可能还希望锁定诸如打印到控制台之类的内容,以确保这些操作不会重叠。