问一下大家,银行家算法解题过程程里f(x)>f(2x-1)转化成|x|>|2x-1|这步是怎么出来的啊?

1.         管程可以看做一个软件模块它昰将共享的变量和对于这些共享变量的操作封装起来,形成一个具有一定接口的功能模块进程可以调用管程来实现进程级别的并发控制。

2.         进程只能互斥得使用管程即当一个进程使用管程时,另一个进程必须等待当一个进程使用完管程后,它必须释放管程并唤醒等待管程的某一个进程

3.         在管程入口处的等待队列称为入口等待队列,由于进程会执行唤醒操作因此可能有多个等待使用管程的队列,这样的隊列称为紧急队列它的优先级高于等待队列。

3.         信息隐藏管程外的进程或其他软件模块只能通过管程对外的接口来访问管程提供的操作,管程内部的实现细节对外界是透明的

3.          条件型变量c:条件型变量c实际上是一个指针,它指向一个等待该条件的PCB队列如notfull表示缓冲区不满,如果缓冲区已满那么将要在缓冲区写入数据的进程就要等待notfull,即wait(notfull)相应的,如果一个进程在缓冲区读数据当它读完一个数据后,要執行signal(notempty)表示已经释放了一个缓冲区单元。

案例一:生产者消费者问题生产者进程将产品放入某一缓冲区,消费者进程到此缓冲区中取产品这个过程必须保证:1. 当缓冲区有剩余空间时,生产者才能在其中放入产品;2. 当缓冲区有数据时消费者才能在其中取出产品。

解决方案:使用管程机制来实现生产者和消费者之间的同步互斥问题

这意味着进程已经被阻塞到紧急队列里

程去唤醒因取不到产品被阻塞的消费鍺进程

也就是被阻塞到紧急队列中去

去唤醒因缓冲区已满而不能放入产品的生产者进程

案例二:读者—写者问题现有一个缓冲区,有若幹读者进程和若干写者进程读者进程在缓冲区读数据,写者进程在缓冲区写入数据这个过程必须保证:1. 读者进程之间不需要互斥;2.写鍺进程之间必须互斥,即当一个写者进程在缓冲区写入数据时别的写者进程必须被阻塞;3. 读者进程和写者进程必须互斥,即当有读者进程在读数据写者进程必须被阻塞,有写者进程在写数据时读者进程必须被阻塞。

解决方案:采用管程机制来解决读者—写者问题

2. 定义條件变量r表示可以对缓冲区读条件变量w表示可以对缓冲区写;

3. 定义布尔类型变量IsWriting表示当前有写者进程在缓冲区写数据;

也就是读者进程被阻塞到紧急队列中

那么唤醒被阻塞的写 者进程

进程存在,那么将要写数据的写者进程被阻塞

注:需要互斥的操作放在管程之间

案例三:哲学家进餐问题

管程设置三个函数:pickup取筷子,putdown放筷子test测试是否具备进餐条件。 

第I 个哲学家的活动:

我要回帖

更多关于 银行家算法解题过程 的文章

 

随机推荐