程序代写代做 C Java 迷你项目2:线程和同步

迷你项目2:线程和同步
截止日期:2020年3月4日

那作业
与上一个小型项目一样,您可以分组工作以完成本实验。

1.使用线程和同步请求调度
在本作业中,我们将使用线程和同步来基于在课堂上研究的Producer
Consumer问题实现有用的应用程序。本实验分为两部分,一个部分需要用Java完成,另一部分需要用C / C ++完成,其总体目标是使您了解使用两种广泛使用的编程语言的线程和同步概念。

该实验室的目标是实现一个多线程请求调度程序,该程序类似于流行的Apache Web服务器如何调度请求。您不需要具备Apache知识即可完成实验-只需使用下面的问题说明即可。

假设请求调度涉及一个主线程和N个从属线程。主线程“监听”请求,并将其插入请求队列。
从属线程等待请求进入请求队列,并且在新请求到达时,任何等待请求的空闲从属线程都可以接受该请求并对其进行处理。

您的目标是使用有限的缓冲区生产者-消费者框架实现该技术的调度请求。假设请求队列是大小为N(即大小为N的数组)的循环缓冲区。该方法涉
及单个生产者(即主线程)和N个消费者(即从线程)。

主线程将随机睡眠一段短时间并产生一个请求。每个请求都有一个顺序增加的请求ID和一个随机选择的请求长度(为每个新请求分配1到M秒之间的随机长度)。然后,主线程将请求插入队列,并在产生另一个请求之前随机返回睡眠一段时间。当然,如果作为受限缓冲区的请求队列已满,则主线程必须等待,然后才能将请求插入队列。

每个从属线程可以空闲或忙碌。当从属线程空闲时,它充当使用者,等待请求队列中的新请求。从线程消耗了队列中的请求后,从属线程将忙于持续时间,该持续时间等于该请求的请求长度。通过使线程在该持续时间内处于睡眠状态,可以模拟从属线程的繁忙状态。完成请求后,从属线程将返回空闲线程,并尝试使用请求队列中的未决请求。如果队列为空,则从属线程必须等待,就像生产者使用者问题中的使用者一样。

在本实验的第1部分中,您将使用Java和Monitors实现上述问题。使用课堂上讨论的概念实现有界的缓冲区生产者和使用者。使用单个生产者
(主线程)和N个使用者(从线程)运行程序。N应该是您指定为程序输
入的可配置参数。您还可以指定其他输入,例如M,请求的最大持续时间和参数,这些参数指示生产者在产生下一个请求之前应休眠的时间。主线程和从线程应如上所述生成和使用请求。让主线程和从属线程打印有用的消息,以指示它们的操作。
例如,生产者应打印诸如
生产者:产生的请求ID为n,时长为t秒,时间为CURRENT-TIME生产者:睡眠了X秒
消费者应打印诸如
使用者i:分配的请求ID n,在接下来的t秒内处理请求,当前时间为 CURRENT-TIME
使用者i:在时间CURRENT-TIME完成的请求ID n

练习的第二部分涉及使用pthreads库解决C ++中的相同问题(如果您更喜欢C ++,则允许使用C)。由于C和C ++不支持监视器,因此应使用信号量来实现解决方案。像以前一样,您的代码应实现一个生产者(主)线程和N个消费者(从属)线程。主线程和从线程应该打印指示性消息,如第1部分中所示,以指示其当前操作。

有用的参考资料如果您不熟悉pthreads,请确保在上阅读此参考资料。
Pthreds编程.简要教程也可以。

关于Java线程和同步的教程很多,例如这里.Oracle提供了并发教程这里

如何上交实验2

以下所有文件必须作为zip文件提交到Canvas上,才能获得此作业的全部功劳。

• 您的zip文件应包含所有源文件的副本。请在zip文件的单独目录中包含第1部分和第2部分的源代码
• 您的zip文件应包含一个README文件的副本,该文件标识您的实验室伙伴
(如果有),并概述了您为该作业所做的工作。它还应说明并激发您的设计选择。解释程序的设计以及同步的工作方式。简明扼要。

如果您的实现不起作用,则还应在自述文件中记录问题,最好是对为何不起作用以及如果您有更多时间如何解决问题进行解释。当然,您还应该注释您的代码。我们无法为您所不了解的事情给您功劳!

• zip文件中的自述文件应包含构建说明,该构建说明应准确说明如何在
Linux上针对Java和C / C ++实现编译代码。优选地,这些将以
Makefile的形式。
• 您的README文件应包含运行说明,确切说明如何在Linux上执行编译后的代码。适用于Java和C / C ++实现。这些说明应包括程序期望或接受的所有命令行参数的描述。如果您的程序打印了一条使用情况消息,那么只需说明如何使您的程序打印该消息即可。如果最大请求持续时间或
生产者睡眠时间只能通过编辑源代码进行调整,则这些值应为全局变量,并且您必须在代码中说明它们的位置。
• 添加简短的讨论,描述您在Java和C / C ++中实现此问题的经验。评论
用不同语言编写问题的努力程度和难易程度。
• 最后,您的zip文件应包含一个副本,其中显示了程序的示例输出。
• 个别小组评估
实验室等级的百分比将来自您作为小组成员参与此项目的结果。
您需要提交的内容(每个人分别):

在您的zip文件中,按以下所示格式将您对分工评估的副本包含在
该组中。对于2人小组,如果您给自己50%,而您的伴侣给您50%,您将获得小组参与的全部积分。如果您给您的伴侣40%,而您的伴侣给他或她自己40%,则他或她的团队参与得分将减少。等等…

• 注意:我们将严格执行欺诈政策。请记住,我们会定期在您的解决方案上运行相似性检查程序来检测作弊行为。请确保您上交自己的作品。

您应该非常谨慎地使用在Internet上找到的代码段。通常,您的代码应该是您自己的。可以阅读网上教程,并在作业中使用这些概念。严禁盲目使用网络代码。如果您对此政策有疑问,请随时与我们联系。并确保在README文件中记录用于完成分配的所有Internet资源/教程。

• 后期政策:有关实验室分配的最新政策,请参阅课程提纲。这项最新政策将得到严格执行。请尽早开始,以便您可以按时提交作业。