lock互斥锁
lock将语句块标记为临界区,当一个线程获取到锁后,其他线程如果需要使用该临界区则必 须要等待前一个线程使用完毕后释放锁后才可以使用。(想象成上厕所,锁门一样)线程同步 就用到这个。
Readwritelock 读写锁
假设采用lock锁:
如果一个对象有读方法和写方法,那么拥有该对象的某个线程在进行读取或者写入的时候,其他线程就无法进行读取或写入。
那么如果使用readwritelock锁的话,当拥有该对象的某个线程在进行读取时,其他线程也 可以进行读取,但是不能写入操作(例如,大家都在上厕所的时候,保洁不能打扫厕所)。当 该线程进行写入操作时,其他线程不可以读取和写入(例如,保洁打扫厕所的时候,任何人不 能入内)。所以readwritelock锁,只有在进行写操作的时候,才会阻断其他线程,即线程 同步,当进行读取操作的时候,其他读操作的线程可以进行并发进行,则写操作等待。
用上厕所举例子总结Readwritelock。上大号的(线程一)、上小号的(线程二)、保洁(线 程三)
上大号的和上小号的可以同时在使用厕所,保洁则无法使用厕所(不考虑保洁上厕所的问题, 当然保洁上厕所就归属于大号或者小号了)。当保洁进入厕所打扫时,其他保洁以及上大号的 和上小号的都无法使用厕所。
该锁的主要作用就是提高了并发访问的性能。
Was this helpful?
0 / 0