在本文中,我们将看到许多经典的同步问题作为一大类并发控制问题的示例。在我们对问题的解决方案中,我们使用信号量进行同步,因为这是呈现此类解决方案的传统方式。然而,这些解决方案的实际实现可以使用互斥锁代替二进制信号量。
这些问题用于测试几乎所有新提出的同步方案。以下同步问题被认为是经典问题:
1. Bounded-buffer (or Producer-Consumer) Problem,
2. Dining-Philosphers Problem,
3. Readers and Writers Problem,
4. Sleeping Barber Problem
这些是总结的,详细的解释,你可以查看每个链接的文章。
- 有界缓冲区(或生产者-消费者)问题:
有界缓冲区问题也称为生产者消费者问题。这个问题被概括为生产者-消费者问题。这个问题的解决方案是,创建两个计数信号量“full”和“empty”来分别跟踪当前的满和空缓冲区的数量。生产者生产一种产品,消费者消费该产品,但每次都使用一个容器。 - 餐饮哲学家问题:
哲学家进餐问题指出 K 位哲学家围坐在圆桌旁,每对哲学家之间夹着一根筷子。每个哲学家之间有一根筷子。如果哲学家能拿起他身边的两根筷子,他就可以吃饭。一根筷子可以被任何一个相邻的追随者捡起,但不能同时被两个人捡起。这个问题涉及以无死锁和无饥饿的方式将有限的资源分配给一组进程。 - 读者和作家问题:
假设要在多个并发进程之间共享一个数据库。其中一些进程可能只想读取数据库,而其他进程可能想要更新(即读取和写入)数据库。我们通过将前者称为读者而将后者称为作者来区分这两种类型的过程。准确地说,在操作系统中,我们将这种情况称为读写器问题。问题参数:- 一组数据在多个进程之间共享。
- 一旦编写器准备好,它就会执行它的写操作。一次只能写一位作家。
- 如果一个进程正在写入,则没有其他进程可以读取它。
- 如果至少有一个读者正在阅读,则没有其他进程可以写。
- 读者不能写,只能读。
- 睡觉理发师问题:
理发店有一个理发师,一把理发椅和N把椅子等待。当没有顾客时,理发师睡在理发椅上,当顾客进来时必须叫醒。当理发师剪头发时,新顾客坐在空位等待,或者如果没有空缺就离开。