【nachos】山东大学操作系统课设实验nachos系统(2):线程同步

1.观察/threads/synch.h中Semaphore的定义
【nachos】山东大学操作系统课设实验nachos系统(2):线程同步_第1张图片
2.观察/lib3/ring.h和ring.cc
【nachos】山东大学操作系统课设实验nachos系统(2):线程同步_第2张图片
可知,slot定义了一个可以存取thread_id(用来存放生产者id)和value(用于存放代表信息的数字)的结构。而Ring定义了一个可以存取slot的循环队列。

3.补全/lib3/producons.cc中的代码实现生产者消费者
大致要补充的内容可以分成四部分
①初始化信号量
简单初始化nempty,nfull,mutex三个信号量即可
nempty = new Semaphore(“emptyS”, BUFF_SIZE);
nfull = new Semaphore(“fullS”, 0);
mutex = new Semaphore(“mutex”, 1);
②创建和fork生产者消费者线程
按实验一中代码实例初始化和fork
Thread *t = new Thread(prod_names[i]);
t->Fork(Producer, i);
③生产者线程中的信号量使用
先对nempty调用P原语,对mutex调用P原语。
添加完信息后对mutex调用V原语,对nfull调用V原语。
发送信息之前要对massage->thread_id和value做合理更改

④消费者线程中的信号量使用
先对nfull调用P原语,对mutex调用P原语。
添加完信息后对mutex调用V原语,对nempty调用V原语

  1. 打开shell,make。
    5.发现错误,原因是有头文件未包含,添加stdlib.h,unistd.h,fcntl.h后正常编译。
    6…/nachos -rs 10 运行程序后,发现结果如下
    【nachos】山东大学操作系统课设实验nachos系统(2):线程同步_第3张图片
    【nachos】山东大学操作系统课设实验nachos系统(2):线程同步_第4张图片
    实验成功。

你可能感兴趣的:(nachos)