系统运行在多核情况或者抢占式时,可能对某些系统资源或者共用代码段进行访问。
资源的读取,修改和写回必须一次完成。如果两个进程同时进行操作,A读取后,B做了修改,
A再做修改,就会覆盖B之前的修改并可能产生错误的结果。
所以Linux使用一些机制来解决这个问题。
1.信号量 进行要对某个资源进行访问,首先要尝试获取信号量,如果没有获取就进入等待。
这样通过一个信号量就对保护了一个资源。
2.原子操作 对整数的加减操作是原子的
3.自旋锁 尝试去访问资源,如果资源被锁了会一直尝试获取锁。这比较耗费资源,所以用于短代码的保护。自旋锁同一个进程获取后不能再次获取,这个要注意。
4.信号量 尝试去访问资源,如果资源被占用会进入睡眠进行等待。由于睡眠操作耗费资源,不适合做睡眠与唤醒的频繁切换,所以适合保护较长的代码段。
5.读写锁 对读的进程不进行限制,但每次写的进程只能有一个。