世界上不是只有一个人,计算计上也不是只有一个程序在运行。有并存,就有竞争。有竞争,就需要避免或解决。
有些操作需要是原子级的(Atomic),比如两个进程都对数据库进行一个赋值操作 set key $value
。但我们不希望两个操作都成功。
这个问题的解决可以从两个角度看。
对于接受操作请求的一方来说:
对于发起操作请求的一方来说:
对于需要获得lock的情况,如何unlock和清除陈旧无效的lock也是需要细心设计的。否则有可能发生死锁(deadlock)。
当然也有一些应用场景,其实是不需要考虑unlock的,或者说unlock是通过别的方法来处理的——比如简单忽略。