今天的文章我们介绍面包店算法。
这个算法是由分布式系统大佬lamport提出的,用来解决多线程抢占资源的锁控制问题。在之前介绍数据库事务原则的时候,曾经介绍过隔离性。不仅在数据库当中,在并发系统当中,只要出现多个线程抢占一个资源的情况,就必然需要引入锁来实现隔离。保证一次只能有一个线程占有资源,防止线程之间的读写操作混乱,导致数据错误。今天讲的面包店算法,就是针对这个场景,实现线程之间隔离的。算法的原理并不难,我们日常生活当中就经常用到。我们应该都有这样的经历,当我们去商场的餐馆吃饭的时候。由于用餐的人太多,所以需要排队。但是商场不可能真的让顾客排成一队,不仅可能会影响通道畅通,而且也不方便顾客。万一顾客还想去买点东西或者是上个厕所,都不方便。所以为了解决这个问题,商场有了叫号的机制。每个排队的顾客都会拿一个号码,当商场里有了空位之后,会让号码最小的顾客进去用餐。这个过程就是面包店算法了,只不过Lamport大神当时可能还没有叫号机,所以他想的场景是面包店买面包,买什么不重要,原理大同小异。我们对叫号的原理进行一点变形,我们假设这个餐厅只有一个位置,