微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设计多线程编程的赋值

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

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

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

We will provide student a very dummy MQ sever which only has one
thread and accepts only 2 client connections,a reader and a writer.
The writer periodically send message to the queue,i.e. the sever,and
the reader reads message from the queue,i.e. the sever sends the
message to the reader. We will also provide the reader and
the writer.

Then we ask the students to modify the sever to accept multiple
readers and writers at the same time. And we will also ask for thread
safety. In other words,a message should only be sent one reader,and
no message is lost in the queue,that requires using of mutex.

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

解决方法

你在用Unix吗?这并不重要,你也可以使用 Windows.

只需创建一个命名管道.

然后创建4个线程.

1个控制线程,1个消费者(读者)线程和2个生产者(编写者)线程.

生产者只需将一个字符串发送到管道,然后消费者获取字符串,将其大写或者打印出来并将其打印出来.

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

显示了不同的线程都在自己工作,但同时由主控制(知道何时关闭等).

奖励积分如果你可以包装这是一个简单的GUI,甚至是一些简单的Ncurses视频显示,这样控制显示总是有可见性来接受命令并显示结果.

您可以显示您是否启动了1个生产者但没有消费者,该线程将如何阻止.与两个生产者相同,或消费者如何阻止没有生产者.

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?