并发 生产者/消费者 读者/写者 哲学家进餐的理解
2014-09-06 16:44
375 查看
转载:http://blog.csdn.net/wonderwander6642/article/details/8049409
生产者/消费者问题
1. 对于生产者,只有货架不满时生产者才能进行生产,否则过剩无处放,没有生产的必要
2. 对于消费者,只有货架上有商品了才能进行购买消费
下面段生产者消费者的伪代码:是一组生产者,一组消费者,n个缓冲区的情形。
生产者与消费者存在同步关系,而且各个生产者之间、各个消费者之间存在互斥关系,他们必须互斥地访问缓冲区。
伪代码
读者/写者问题
与生产者/消费者问题不同的地方:1.数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。2.允许多个读者同时并发访问,而消费者却要互斥,写者不仅要和写者之间互斥,还要与读者也互斥,对于生产者/消费者只需与自身互斥
写者优先伪代码:
x,y分别保护临界资源readcount,writecount。W为写者写数据的互斥排队。为什么该代码是写者优先呢?z互斥信号量保证了在z上面排队的比在r上面排队的多,当有读者存在时,来了个写者,writecount=1使得写者是排在r信号队列上,由于大多数的读者都排在z队列上,使得不会有很多的读者与写者竞争r信号,而当有写者不断进来,即使来的比一些排在z队列上的读者晚,只要writecount不等0,r信号就不会释放,使得排在z队列上的读者一直在等待,从而保证写者优先。
读者优先:
哲学家进餐问题
N个哲学家N个筷子,只要保证一开始竞争的人数为N-1个就一定有一个人能进餐
Semaphore:room=N-1
Wait(room)
Wait(i)
Wait((i+1)mod(N))
Eat
Signal(i+1)mod(N))
Signal(i)
Signal(room)
生产者/消费者问题
1. 对于生产者,只有货架不满时生产者才能进行生产,否则过剩无处放,没有生产的必要
2. 对于消费者,只有货架上有商品了才能进行购买消费
下面段生产者消费者的伪代码:是一组生产者,一组消费者,n个缓冲区的情形。
生产者与消费者存在同步关系,而且各个生产者之间、各个消费者之间存在互斥关系,他们必须互斥地访问缓冲区。
伪代码
读者/写者问题
与生产者/消费者问题不同的地方:1.数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。2.允许多个读者同时并发访问,而消费者却要互斥,写者不仅要和写者之间互斥,还要与读者也互斥,对于生产者/消费者只需与自身互斥
写者优先伪代码:
x,y分别保护临界资源readcount,writecount。W为写者写数据的互斥排队。为什么该代码是写者优先呢?z互斥信号量保证了在z上面排队的比在r上面排队的多,当有读者存在时,来了个写者,writecount=1使得写者是排在r信号队列上,由于大多数的读者都排在z队列上,使得不会有很多的读者与写者竞争r信号,而当有写者不断进来,即使来的比一些排在z队列上的读者晚,只要writecount不等0,r信号就不会释放,使得排在z队列上的读者一直在等待,从而保证写者优先。
读者优先:
哲学家进餐问题
N个哲学家N个筷子,只要保证一开始竞争的人数为N-1个就一定有一个人能进餐
Semaphore:room=N-1
Wait(room)
Wait(i)
Wait((i+1)mod(N))
Eat
Signal(i+1)mod(N))
Signal(i)
Signal(room)
相关文章推荐
- 进程同步的几个经典题目-生产者消费者-哲学家进餐-读者写者
- 操作系统进程同步三大问题:生产者消费者,哲学家进餐,读者写者问题
- 经典同步问题linux下的C实现:生产者-消费者问题,读者-写者问题,哲学家问题
- 经典同步问题linux下的C实现:生产者-消费者问题,读者-写者问题,哲学家问题
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- 进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结
- 经典的IPC问题 -- 哲学家就餐问题、读者-写者问题、理发师睡觉问题、生产者-消费者问题详解
- linux系统生产者-消费者,读者-写者,哲学家就餐 C语言实现
- Java实现生产者消费者问题与读者写者问题
- Java 5种方法实现生产者消费者问题与2种方法实现读者写者问题
- 深入理解并发(二)--生产者及消费者
- Java实现生产者消费者问题与读者写者问题
- 读者与写者、生产者与消费者
- 生产者消费者 & 读者写者
- Java实现生产者消费者问题与读者写者问题详解
- Java实现生产者消费者问题与读者写者问题
- 哲学家进餐问题与生产者与消费者问题(java实现)
- Java实现生产者消费者问题与读者写者问题
- 多线程 生产者&消费者 哲学家进餐 & random & synchronized & Thread & Sleep
- Java实现生产者消费者问题与读者写者问题