设计多线程编程的赋值

abl*_*lmf 7 multithreading

本学期我是OS课程的助教.所以我被要求为具有有限C编程技能的CS本科生设计多线程编程

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

这就是我在想的,一个简单的Message Queue服务器.

我们将为学生提供一个非常虚拟的MQ服务器,它只有一个线程,只接受2个客户端连接,一个读者和一个写入器.编写器周期性地向队列(即服务器)发送消息,并且读取器从队列中读取消息,即服务器将消息发送给读取器.我们还将提供读者和作者.

然后我们要求学生修改服务器以同时接受多个读者和作者.我们还会要求线程安全.换句话说,只应向一个阅读器发送一条消息,并且队列中不会丢失消息,这需要使用互斥锁.

我觉得这可能太简单了,但此刻我想不出别的什么.如果你在我的位置,你会给予什么职责?

Wil*_*ung 0

你使用的是Unix吗?这并不重要,您也可以使用 Windows 来实现此目的。

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

然后创建4个线程。

1 个控制线程、1 个消费者(读取器)线程和 2 个生产者(写入器)线程。

生产者只需将一个字符串发送到管道,而消费者则获取该字符串,将其大写或其他内容并将其打印出来。

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

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

如果您可以将其包装为一个简单的 GUI,甚至是一些简单的 Ncurses 视频显示器,则奖励积分,以便控制显示器始终具有可见性以接受命令并显示结果。

您可以显示如果启动 1 个生产者但没有启动消费者,线程将如何阻塞。与两个生产者相同,或者消费者如何在没有生产者的情况下进行阻塞。

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

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