哲学家进餐:
哲学家问题可出现拿起左边的筷子,然后拿起右边的筷子进餐,但是假如五个哲学家同时拿起左边的筷子,那么右边的筷子都取不到
你可能这样思考就是就是你拿起左边的筷子,查看右边的筷子是否可用,如果不可用,等一会在重复上述问题,但是可能在某一瞬间,所有哲学家都拿起左边的筷子,然后发现没有右边的筷子,同时又放下左边的筷子,这样重复下去,这种情况成为饥饿
解决上述方法可以使用一个二进制信号量,这里面有一个性能问题,就是采用信号量同一时间只有一个哲学家就餐,但是实际上可以允许俩个哲学家就餐
这里面涉及俩个信号量一个临界区信号量,代表着同一时刻只有一个哲学家,另一个信号量是哲学家信号量如果一个哲学家准备就餐,那么down该信号量,如果俩个叉子都可用,那么会吃面,然后放下叉子,如果获取不到叉子那么就会,就会把他的哲学家信号量down然后阻塞还哲学家,就是他不能就餐然后必须等别人放下叉子之后就可以了
读-写者问题:
它为数据库访问建立了一个模型
有一种解法就是,第一个读者对该信号量执行一个down操作,随后读者只是递增一个计数器rc,然后读者离开时,递减这个计数器。但是这里面有一个问题,由于写操作是排他的,所以写操作到来时,只要有读操作那么,写操作永远都不会被执行,写操作后面的读操作都被允许访问数据库。提供了一种解法就是如果写操作到来那么后面的读操作都会被阻塞,写操作前的读操作结束之后写操作就会被执行
理发师睡觉问题
这个问题的原型是一个理发椅,多个顾客等待椅,一个理发师,如果没有客人那么理发师睡觉,第一个客人来到了,那么它获得信号量,其他客人只能等第一个客人释放信号量,他才能继续剪头,如果等待剪头的椅子满了的话,顾客就离开了,等待顾客也是获得该信号量,只不过阻塞在该信号量上,有顾客来就把up顾客的信号量,顾客释放了信号量,理发师先获得信号量,整理之后才能剪头,然后顾客才能获得该信号量