What Is Lock?

Date
Tags
  • fun
  • locks

在给学弟们解释锁的时候,突然想到的一个例子。觉得有趣,记录一下

想象一下,你正在参加一个大型派对,排队上有且只有一个洗手间,且只能容纳一个人使用。 当后来者想要使用洗手间时,他必须先等待前面的人使用完洗手间。

这就是 的基本概念。在编程世界中, 就像那个 洗手间的门,而 线程 就像 派对的参与者

§排他锁和共享锁

现在,让我们把派对的规模扩大一些,假设有一间更大的洗手间,可供多个人同时使用。如果有人需要使用洗手间来更换衣服,那么他就需要确保洗手间里没有其他人。

共享锁 允许多个人同时使用洗手间,此时多个线程可以同时访问资源。

但是如果有线程需要写入资源(更换衣服),那么它必须先获取 排他锁

§公平锁和非公平锁

公平锁 就像是洗手间的排队规则,每个人都必须按照到达的顺序等待使用洗手间。也就是说,如果你是后来者,你需要到队伍的最后面去,找个凳子坐下,耐心等待。

非公平锁 则不同,它允许一个新来的人插队。来得早不如来得巧,如果他到了洗手间门口,刚好看到有人刚从洗手间出来,那么他可以直接进入洗手间,不需要排队等待。

非公平锁 虽然可能看起来不那么公正,但由于它减少了线程切换和调度的开销,所以性能上比 公平锁 更好。