日常学习记录5:通俗理解各种锁(互斥、读写、自旋、排他、共享、悲观、乐观)

锁机制用来实现进程线程的同步互斥,保证操作数据的正确性/一致性,来一个一个盘一下:


1.互斥锁:就是经常见到的mutex,每个线程在对共享资源(比如一个作为缓冲区的全局数组)进行操作前先申请互斥锁,申请到的可以进行操作,没申请到的要阻塞阻塞阻塞

互斥锁的释放只能由加锁的那个线程来释放。

互斥锁只有加锁、解锁两种操作。


2.读写锁:读写锁适合用于读操作多的场景。拥有读锁的线程可以读资源,拥有写锁的线程可以写资源。

某线程对资源加读锁时,其他线程可以也可以加读锁,但是不能加写锁(意味着有人在读的时候,其他人也能读,不能写)。

某线程对资源加写锁时,其他线程什么锁都不能加(意味着有人在写的时候,其他人什么都不能干)。

如果去申请不能加的锁,则阻塞

读写锁有加读锁、加写锁、解锁三种操作。


3.自旋锁:线程在获取共享资源前先申请获取锁,如果申请不到,则一直继续申请(而不是阻塞),直到申请到为止。


4.排他锁:等于读写锁中的写锁,因为其他人什么都不能干,所以“排他”。

5.共享锁:等于读写锁中的读锁,因为其他人还可以读,所以“共享”。


6.悲观锁:用在数据库中的概念。意思是悲观的认为每次读数据的过程中别人都会修改(还用读取缓冲区数组理解,不要用读取单个变量理解,有可能读了一半数组而后一半被人改了),所以每次读取数据之前都要加锁。

如数据库的行锁,表锁等。

7.乐观锁:也是用在数据库中的概念。意思是乐观的认为每次读数据的过程中别人都不会改,但是在读完进行写的时候会判断在此期间别人有没有去改这个数据,如果别改了,自己就改不成了,要回退

适用于读操作多的场景。

如CAS机制:Compare And Swap比较并替换,这篇文章讲的很形象
乐观锁的实现机制–CAS(Compare And Set)


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值