我正在研究pthreads上的任务。我是新手,从未接触过pthreads。你们中的任何人都有任何样本代码或资源,这对我的任务有帮助吗?
以下是我的作业详情。关于队列系统的pthread程序:
为牙科诊所的排队系统编写一个C / C ++ Pthread程序,该系统声明了一个 大小为N的整数数组,其中N是当天的最大队列数。该 pthread程序使用两个线程。
每当有新的牙科预约时,第一个 线程(创建者)将队列号一个接一个地放入数组中。该 第二个线程(移除器)每当从数组中删除队列号 牙医见过病人。这是以FIFO方式(先进先出)完成的。 创建者的算法如下:
•如果数组未满,则在其中输入一个新数字(数字从1开始 并且每次增加1,因此创建者创建队列号1,2,3等。)
•随机睡眠1到10秒
•重复
卸妆的算法如下:
•如果数组不为空,则删除其最小的队列号。
•随机睡眠1到10秒
•重复
您应该使用互斥锁来保护必须受到保护的内容。每个线程 应该在屏幕上打印它正在做什么(例如:“数字13被添加到队列中”, “从队列中删除号码7”等)。该程序应该永远运行。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:4)
一般情况下,首先使用pthreads,this是一个很好的网站,可能会提供超出您需要的信息(但我喜欢详细信息)。它贯穿了很多pthreads的基础知识。如果您更喜欢死树教程,this book非常好,并且如果您想要将其称为Linux API的大多数功能或核心库,那么您将获得良好的基础。这个stackoverflow question非常简洁地处理互斥锁与信号量。
最后,我喜欢this site,因为它具有Linux线程和同步功能。
希望这些能为您提供一些阅读材料。弄清楚如何处理线程,然后是如何同步它们,然后解决你的问题。
答案 1 :(得分:0)
这是典型的生产者 - 消费者问题。
有很多方法可以解决这个问题,但最简单的方法是对队列进行一次锁定,当你在生产者或消费者中添加或删除项目时,分别锁定队列,完成工作,然后解锁队列。在消费者中,处理项目,在生产者中,继续进行获取新项目的工作。
您可能希望布置数据结构,然后定义锁,具体描述锁的锁定方式,这样您就可以确保两个线程访问的所有数据都保持同步。
感谢您将此标记为作业;我希望这能让你开始朝着正确的方向前进。您可能还希望锁定诸如打印到控制台之类的内容,以确保这些操作不会重叠。