lucky
发布于 2023-12-22 / 12 阅读
0

编程中的锁

计算机中的锁,它到底是什么?

引用维基百科中锁的解释

在计算机科学中,锁或互斥量(来自“mutual exclusion”)是一种同步原语:它是一种机制,当存在多个执行线程时,强制限制对资源的访问。锁的设计目的是为了实施互斥并发控制策略,并且存在多种可能的方法,针对不同的应用程序有多个独特的实现。

解释:锁用于保证并发环境中对共享资源访问的互斥,限制共享资源访问的同步机制

锁的分类

  • 读锁,S锁,共享锁,写锁,X锁,独占锁,排他锁,读写锁
  • 公平锁,非公平锁
  • 乐观锁,悲观锁
  • 自旋锁,阻塞锁
  • 可重入锁,不可重入锁
  • 偏向锁,轻量级锁,重量级锁
  • 分段锁

本质,指的是互斥与共享的本质

  1. 互斥:写锁,X锁,独占锁,排他锁;
  2. 共享:读锁,S锁,共享锁;

设计,指的是锁的设计方式;

  1. 乐观锁,悲观锁;
  2. 读写锁;

特性,指的是在本质上添加的特性;

  1. 公平锁,非公平锁;
  2. 自旋锁,阻塞锁;
  3. 可重入锁,不可重入锁。
  4. 读锁,写锁和读写锁

悲观锁和乐观锁
共享资源是否会被修改持什么态度
悲观锁(Pessimistic Locking) :认为并发访问共享资源总是会发生修改,因此在进入临界区前进行加锁操作,退出临界区后进行解锁。
乐观锁(Optimistic Locking) :认为并发访问共享资源不会发生修改,因此无需加锁操作,真正发生修改准备提交数据前,会检查该数据是否被修改。如果数据被修改,则重新读取最新数据,并重试整个操作。

读锁与写锁及读写锁
读锁是共享锁,写锁是排他锁,读锁可以同时被多个线程获取,写锁只能被一个线程获取。
读写锁是指一个锁可以同时被多个读线程获取,但是只能有一个写线程获取,读写锁可以保证读的效率。

公平锁与非公平锁
公平锁是指多个线程按照申请锁的顺序来获取锁,先到的线程可以先获得锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有抢占现象,有可能后申请的线程获得锁的概率更大。

自旋锁与阻塞锁
自旋锁是指线程在获取锁的时候会循环等待,直到获取到锁或者等待时间超过
阻塞锁是指线程在获取锁的时候如果没有获取到锁就会一直等待下去,直到获取到锁或者等待时间超过。

可重入锁与不可重入锁
可重入锁是指同一个线程在获取锁的时候,可以多次获取,而不会出现死锁。
不可重入锁是指同一个线程在获取锁的时候,不能多次获取,否则会出现死锁。