1. 读写锁与互斥锁的区别及读写锁应用场景
对于后端数据服务维护人员来说,大多数数据类型服务,总是数据读取次数远大于数据修改次数,而读写锁的特殊机制非常适用于数据类型服务。近年来一直负责后端服务维护与功能开发,所负责的后端数据类型服务却都是采用互斥锁来进行数据保护,读写锁未尝一见,总是对其念念不忘,抽时间按照自己所想来实现一把,亲自揭开这个神秘的东东。
互斥锁:顾名思义是排他性质,在任意时刻只有一个线程能获得该锁使用权。利用该特性,在多线程编程中用互斥锁保护数据,保证数据即便是在多线程环境下,同一时刻也只有一个获得互斥锁使用权的线程可进行数据读取或写入,其他需要访问数据的线程只有在互斥锁被释放后,获得该锁使用权才能进行数据操作。通过该种机制才能保障数据的完整性,有效性和程序的健壮性,杜绝脏数据,访问无效对象,服务崩溃等bug。互斥锁具有排他性,所有锁使用者只能串行运行。
读写锁:互斥锁不进行数据访问行为分类,不管数据读取还是数据写入,所有需要访问数据的线程被强制排队串行,依次进行数据访问。如果将数据访问行为分类,将读取数据划分为读者,数据写入划分为写者,根据数据访问行为逻辑可得到,所有读者线程因为仅仅进行数据读取,不会进行数据和数据结构的变更,在该前提下,所有读者线程是完全可以并行。在数据可读条件下,所有读者线程可同时访问数据。写者线程因为可能会对数据和数据结构进行变更,所以一旦写者线程获得了锁的使用权