首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

并发 生产者/消费者 读者/写者 哲学家就餐的理解

2012-10-12 
并发 生产者/消费者 读者/写者 哲学家进餐的理解生产者/消费者问题1.对于生产者,只有货架不满时生产者才能

并发 生产者/消费者 读者/写者 哲学家进餐的理解

生产者/消费者问题

1.       对于生产者,只有货架不满时生产者才能进行生产,否则过剩无处放,没有生产的必要

2.       对于消费者,只有货架上有商品了才能进行购买消费

伪代码

并发 生产者/消费者 读者/写者 哲学家就餐的理解

读者/写者问题

与生产者/消费者问题不同的地方: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)

 

热点排行