首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程编程作业的设计

多线程编程作业的设计
EN

Stack Overflow用户
提问于 2012-01-10 03:18:54
回答 4查看 1K关注 0票数 7

这学期我是OS课程的助教。因此,我被要求为具有有限C编程技能的CS本科生设计一份多线程编程的作业。

这不应该是一个很大的任务,因为它只需要5%的最终成绩。这应该是新的东西,这样学生就不能从互联网上下载一些代码了。

下面是我的想法,一个简单的消息队列服务器。

我们将为学生提供一个非常虚拟的MQ服务器,它只有一个线程,只接受两个客户端连接,一个阅读器和一个作者。写入器周期性地向队列(即服务器)发送消息,读取器从队列中读取消息,即服务器将消息发送给读取器。我们还将提供读者和作者。 然后,我们要求学生修改服务器,同时接受多个读者和作者。我们也会要求线程安全。换句话说,消息应该只发送一个读取器,队列中不会丢失任何消息,这需要使用互斥锁。

我觉得这可能太简单了,但此刻我想不出任何其他的事情。如果你在我的位置,你会给什么任务?

EN

回答 4

Stack Overflow用户

发布于 2012-01-10 03:34:17

你在用Unix吗?这并不重要,您也可以使用Windows进行此操作。

简单地,创建一个命名管道。

然后创建4个线程。

一个控制线程,一个使用者(读取器)线程,和两个生产者(写入器)线程。

生产者只需将一个字符串发送到管道,而使用者获取该字符串,大写它或其他什么,并打印出来。

控制线程用于启动和停止其他3个线程。它需要简单的命令: startProducer1、startProducer2、startConsumer、停止命令和关闭命令。

这显示了不同的线程都是独立工作的,但同时由主线程控制(知道何时关闭,等等)。

加分如果你可以包装这是一个简单的GUI,甚至一些简单的Ncurses视频显示,使控制显示始终具有可见性,以接受命令和显示结果。

如果启动了1个生产者,但没有使用者,您可以显示线程将如何阻塞。相同的两个生产者,或如何消费者阻止没有生产者。

使用管道意味着您不必依赖该外部程序(以及设置它、调试它和支持它的所有细节)。

Unix和Windows都有命名管道(但我认为系统调用不同,但是POSIX可移植性可能只在这里工作.)。

票数 0
EN

Stack Overflow用户

发布于 2012-01-10 03:34:23

您可以在连接池管理器的原始阶段创建一个连接池,并且能够可靠地使用和重用一个连接对象。

其次,您可以拥有一个httpclient,它可以只执行多个GET请求(因为其他请求会使其过于复杂),并且您应该能够验证与每个请求对应的所有响应(还可以使其用于取消请求)。

第三,最简单的编写一个简单的服务器套接字,它可以接受每个不同的请求并将其分配给新的服务器线程,完成请求并返回响应。

这就是我能想到的..。

票数 0
EN

Stack Overflow用户

发布于 2012-01-10 04:12:17

典型问题(如餐饮哲人 )的好处是,在不深入了解实现细节的情况下,很容易演示死锁和饥饿。

如果你真的需要一些原创的东西,试着选择一个很容易预见并发陷阱的项目。这样,学生们很可能会遇到他们,从作业中得到更多。否则,重新制定一个经典的问题,使它与现有的互联网解决方案有足够的不同,但在本质上仍然一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8798147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档