计算机基础之锁的分类
2019-12-04 本文已影响0人
绍清_shao
内容
- 锁出现的原因
- 信号量(Semaphore)
- 互斥量(Mutex)
锁出现的原因
避免多个线程同时读写同一个数据而产生不可预料的后果,我们需要将各个线程对同一个数据的访问同步。所谓同步,既是指在一个线程访问数据未结束时,其他线程不得对同一个数据进行访问。
同步的最常见方法是使用锁(Lock)
信号量
二元信号量(Binary Semaphore)是最简单的一种锁,只有两种状态:占用与非占用。它适合只能被唯一一个线程独占访问的资源。当二元信号量置为非占用状态时,第一个视图获取改二元信号量的线程会获得该锁,并将二元信号量置为占用状态,此后其他的所有视图获取该二元信号量的线程将会等待,直到该锁被释放。
对于允许多个线程并发访问的资源...
互斥量
互斥量对应的是互斥锁,互斥锁分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。
-
递归锁
递归锁也叫可重入锁(reentrant mutex)
递归锁维护这一个Lock和一个counter变量
一个线程可以用递归锁对资源多次加锁,直到这个线程加的锁都被释放,其他线程才能获得这个资源 -
非递归锁
非递归锁也叫不可重入锁(non-reentrant mutex)。如果线程已经对一个资源加上非递归锁后,没释放的前提下再次加锁会造成这个线程的阻塞,一直在等待这个锁的释放。