What Is Lock?
- Date
- Tags
- fun
- locks
在给学弟们解释锁的时候,突然想到的一个例子。觉得有趣,记录一下
想象一下,你正在参加一个大型派对,排队上有且只有一个洗手间,且只能容纳一个人使用。 当后来者想要使用洗手间时,他必须先等待前面的人使用完洗手间。
这就是 锁 的基本概念。在编程世界中,锁 就像那个 洗手间的门,而 线程 就像 派对的参与者。
§排他锁和共享锁
现在,让我们把派对的规模扩大一些,假设有一间更大的洗手间,可供多个人同时使用。如果有人需要使用洗手间来更换衣服,那么他就需要确保洗手间里没有其他人。
共享锁 允许多个人同时使用洗手间,此时多个线程可以同时访问资源。
但是如果有线程需要写入资源(更换衣服),那么它必须先获取 排他锁。
§公平锁和非公平锁
公平锁 就像是洗手间的排队规则,每个人都必须按照到达的顺序等待使用洗手间。也就是说,如果你是后来者,你需要到队伍的最后面去,找个凳子坐下,耐心等待。
非公平锁 则不同,它允许一个新来的人插队。来得早不如来得巧,如果他到了洗手间门口,刚好看到有人刚从洗手间出来,那么他可以直接进入洗手间,不需要排队等待。
非公平锁 虽然可能看起来不那么公正,但由于它减少了线程切换和调度的开销,所以性能上比 公平锁 更好。