说起锁,大家都不会感到陌生,在多线程编程的时候,为了保证线程安全,需要给特定的代码段进行加锁执行完毕后再进行解锁。
不过,有一个场景比较特殊:假设有一个文件,我们肯定不希望读操作和写操作同时进行,但是除了这一点,在读取的时候,其实我们没有必要对其他的读取操作进行加锁,这样显得更为合理,那么如何去实现这样一个锁呢?(写入的时候加锁,阻止读取操作和其他的写入操作。读取的时候也加锁,阻止写入操作,但是不阻止其他的读取操作)
既然需求已经明确了,那我们就来梳理一下思路。
1 | // 1 一个资源同时可以有多个读写,但是只能有一个写锁 |
然后还有一些情况需要考虑:当前有未执行的读操作,也有写操作等待执行,那么我们如何来处理读写优先级的问题呢,这些都是在后期结合需求考虑去优化的问题。