简介: 关于锁的基本概念理解

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

1.互斥锁:每个线程在对共享资源进行操作前先申请互斥锁,申请到的可以进行操作,没申请到的要阻塞阻塞阻塞!

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

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

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

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

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

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

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

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

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

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

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

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

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

适用于读操作多的场景。

重入公平判断

简单的说

中断就是可以停止当前状态

公平就是保证顺序对优先执行权不敏感

重入就是A锁被获取时这个时候B来拿A还能拿到一个A锁 只不过这个A锁类似是本来的子锁 不是同一个 类似A A1的意思 在这个时候是可以进去锁控制的代码 但是实际执行还是按照顺序来的

相关文章
|
6月前
|
Java
java中的锁是一种同步机制,用于控制并发访问共享资源的线程。在多线程程序中,如果多个线程同时访问同一个共享资源,就可能会导致数据不一致或者死锁等问题。Java中提供了多种锁机制来解决这些问题,常见的包括synchronized关键字、ReentrantLock类、Read/Write Lock等。
36 0
|
5月前
|
Linux API C++
锁、避免死锁等相关
锁、避免死锁等相关
33 0
|
7月前
|
存储 算法 安全
辛辛苦苦的劳动成果,如何上把锁?
辛辛苦苦的劳动成果,如何上把锁?
|
8月前
|
数据可视化 Java
lock锁和死锁
lock锁和死锁
47 0
|
9月前
《锁》有那些?
锁是计算机科学中用于控制对共享资源的访问的一种同步机制。不同种类的锁适用于不同的场景和需求。下面是一些常见的锁的种类及其详细介绍:
48 1
|
9月前
共享锁(读锁)和排他锁(写锁)
共享锁(读锁)和排他锁(写锁)
50 0
|
11月前
|
存储 对象存储
|
PHP
并发锁(二):共享锁和独占锁
并发锁(二):共享锁和独占锁
179 0
并发锁(二):共享锁和独占锁
|
Java
各种锁的理解
各种锁的理解
95 0
各种锁的理解
|
存储 Java
identityHashCode与偏向锁
我们知道在Java中,一切对象都继承自java.lang.Object类。这个类中有一个可继承的方法叫hashCode()。
266 0