ReAllTh

Smoker problem

抽烟者问题 问题描述: 有一个供应者和三个抽烟者。每个抽烟者不停地卷烟并抽掉它,但要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者进程无限地供应三种材料,供应者每次将两种材料放到桌子上,拥有剩下那种材料的的抽烟者卷起一根烟并抽掉它,并给供应者一个信号告诉已完成,此时供应者就会将另外两种材料放到桌上,如此重复(...

Sleeping barber problem

睡眠理发师问题 经典睡眠理发师问题 问题描述: 理发店有一位理发师、一把理发椅和 \(n\) 把供等候理发的顾客休憩的椅子;如果没有顾客,理发师便在理发椅上睡觉,当有顾客到来时,他唤醒理发师;如果理发师正在理发时又有新顾客来到,那么,如果还有空椅子,顾客就坐下来等待,否则就离开理发店。 经典问题,固定解法。如下: semaphore barber = 0; semaph...

Readers Writers problem

读者-写者问题 问题描述: 有读者和写者两组并发进程,共享一个文件,当多个读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时,则可能导致数据不一致的错误。因此要求: 允许多个读者同时对文件执行读操作; 只允许一个写者对文件执行写操作; 任何写者在完成写操作前不允许其他读者或写者工作; 写者在执...

Dining Philosophers problem

哲学家就餐问题 题目描述: 有 \(5\) 位哲学家围坐在一张圆桌旁,桌子中央放有一盘通心面,每人面前有一只空盘子,每两人之间放一把叉子;每位哲学家思考、饥饿,然后吃通心面;为了吃面,哲学家必须获得两把叉子,且每人只能从紧邻自己的左边或右边去取叉子。 为了避免 \(5\) 名哲学家同时拿起一边筷子导致死锁,有几种方法: 至多允许 \(4\) 名哲学家同时吃通...

Bounded Buffer (or producer Consumer) problem

生产者-消费者问题 单生产者、单消费者、单缓冲区(经典生产者消费者问题) 题目描述: 一组生产者进程和一组消费者进程共享一个初始为空、大小为 \(n\) 的缓冲区,只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待;只有缓冲区不为空时,消费者才能从中取出产品,否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入产品,或一个消费者从中取出产品。 经典问题,固定...

设计模式知识点总结

设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。 对于每个设计模式要知道:名字、问题(使用场景)、解决方案、效果(优缺点)、示例代码 设计模式的类型有:创建型(用于创建对象)、结构型(用于组织结构)、行为型(用于处理职责和交互),根据处理范围也可以分为类模式和对象模式 重点是简单工厂模式、工厂方法模式、抽象工厂模式、单例...