分布式锁:一、基础知识

一、在讨论锁之前,我们需要先看下进程之间的两种主要关系,同步和互斥。

互斥:是指散步在不同进程之间的若干程序片段,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

二、在这之前,我们先看下什么是锁?锁的种类?以及为什么我们需要锁?

锁:是在解决资源竞争的时候的一种策略,是处理并发的一种同步手段。例如:当多个线程、进程或者客户端在访问同一个资源的时候,因为访问和更改该资源的先后顺序的问题,而导致获取的信息不一致。而锁的引入,可以保证该资源的被同一个使用者使用时,操作结果是一致的。

最常用的锁,有读写锁和互斥锁。

读写锁:主要用于多线程,解决多线程之间的读写问题,主要是为了解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。

读写锁特点:

1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

互斥锁:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。

互斥锁特点:xi

 一次只能一个线程拥有互斥锁,其他线程只有等待。
三、分布式锁:

用于分布式系统中,是控制分布式系统之间同步访问共享资源的一种方式。主要用于解决下面两个场景:

1.效率:避免不同节点重复相同的工作。如果一个动作只需要一个节点处理,那我们要避免这个动作被多个节点都进行操作。

2.正确性:如果一个数据会被不同的节点使用,而这个数据的操作受不同节点的操作影响,那么我们需要分布式锁来保证操作的正确性。

分布式锁需要具备的特性:

1.互斥性,这个与非分布式锁并无明显区别,需要保证单个节点之间的互斥性。
2.可重入性:同一个人节点的同一个线程获取到这个锁之后,
该线程还是可以继续获取该锁。
3.锁超时机制:因为分布式节点往往分布在不同的机器上,
那么就涉及到网络通讯的情况,而网络通讯又具备不稳定性,
所以我们需要超时机制来保证,锁不能一致被释放。
4.高效性:不能因为锁的缘故,导致分布式系统,卡在这一步。

分布式锁的作用及实现(Redis)

聊聊高并发(三)锁的一些基本概念

维基百科:读写锁

再有人问你分布式锁,这篇文章扔给他


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值