nachos操作系统(三)

今天将nachos中的锁机制和条件变量的实现补充完整,并利用这些同步机制实现几个基础工具类。

1. 实现锁机制和条件变量,并利用这些同步机制将实验一中所实现双向有序链表类修改成线程安全的;

2. 实现一个线程安全的表结构;

3. 实现一个大小受限的缓冲区。

在synch.h中,有semaphore类,即信号类,里面封装了PV操作,还有value和queue等基本东西,Lock类,这个类里面的东西比较少,应该只有Acquire和release两个函数起重大作用。一个condition类,里面有wait和signal和broadcast等重要操作,然后就没了,这个文件是比较有用的。

看看它的实现吧。就他娘的实现了PV操作的函数,其他函数都是空的。实验就是让我们编写这些函数,然后另存为synch_sleep文件,用多种方法实现锁机制,存成多个文件(最后就是提交这些文件),然后用前面实现的锁机制和条件变量修改双向链表,从而让它们正常执行。

现在的话就是用Thread::sleep来实现锁机制。这个Thread::sleep应该 是系统自己已经定义好的函数,它能让程序暂停,与其相反的是readytorun,也就是说,用最简单的方式实现互斥吗?

不是,这里不是有lock和condition两个空类吗?它这里已经定义好了接口,我们的工作就是用sleep来实现一次,然后再用sem实现一次,用的时候,我们就用lock和condition,那个sem只是我们构建lock和condition的一个工具,不能用在实际生产中的那种。最后我们用lock和condition实现互斥,就是这样。

那首先的是,如何用lock和condition来实现互斥呢?这时候就需要看看网络上的见解了。

但是怎么用呢?lock就两个作用函数,Acquire和release,怎么说呢?就是每一个临界区,都有一个lock,这样,每个进程在访问之前,都要先访问这个lock,每个进程用完了之后,必须执行release,就是这样。而它是怎么分配的,就要看自己的编程能力了。

话说回来,直接用sleep来完成lock,跟sem好像啊。另外说一点,文档之所以让我们读读list,是因为queue就是用list实现的。


















 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值