锁机制用来实现进程线程的同步互斥,保证操作数据的正确性/一致性,来一个一个盘一下:
1.互斥锁:每个线程在对共享资源进行操作前先申请互斥锁,申请到的可以进行操作,没申请到的要阻塞阻塞阻塞!
互斥锁的释放只能由加锁的那个线程来释放。
互斥锁只有加锁、解锁两种操作。
2.读写锁:读写锁适合用于读操作多的场景。拥有读锁的线程可以读资源,拥有写锁的线程可以写资源。
某线程对资源加读锁时,其他线程可以也可以加读锁,但是不能加写锁(意味着有人在读的时候,其他人也能读,不能写)。
某线程对资源加写锁时,其他线程什么锁都不能加(意味着有人在写的时候,其他人什么都不能干)。
如果去申请不能加的锁,则阻塞。
读写锁有加读锁、加写锁、解锁三种操作。
3.自旋锁:线程在获取共享资源前先申请获取锁,如果申请不到,则一直继续申请(而不是阻塞),直到申请到为止。
4.排他锁:等于读写锁中的写锁,因为其他人什么都不能干,所以“排他”。
5.共享锁:等于读写锁中的读锁,因为其他人还可以读,所以“共享”。
6.悲观锁:用在数据库中的概念。意思是悲观的认为每次读数据的过程中别人都会修改(还用读取缓冲区数组理解,不要用读取单个变量理解,有可能读了一半数组而后一半被人改了),所以每次读取数据之前都要加锁。
如数据库的行锁,表锁等。
7.乐观锁:也是用在数据库中的概念。意思是乐观的认为每次读数据的过程中别人都不会改,但是在读完进行写的时候会判断在此期间别人有没有去改这个数据,如果别改了,自己就改不成了,要回退。
适用于读操作多的场景。
重入公平判断
简单的说
中断就是可以停止当前状态
公平就是保证顺序对优先执行权不敏感
重入就是A锁被获取时这个时候B来拿A还能拿到一个A锁 只不过这个A锁类似是本来的子锁 不是同一个 类似A A1的意思 在这个时候是可以进去锁控制的代码 但是实际执行还是按照顺序来的