原子访问、自旋锁、互斥锁、信号量

内核防止竞争状态的常用手段:原子访问、自旋锁、互斥锁、信号量

原子访问:整个访问过程不能被打断,一步执行完。主要用来做计数,

互斥锁:其实就是一种等待锁,就像平常去卫生间一样,进去后要上锁,其他人会在一直等待(类似等待队列),当从卫生间出来解锁后,下一个人才能进去。

上锁

mutex_lock:别人上锁期间,自己不能被打断,即不能从等待队列里跳出;mutex_lock_interruptible:别人上锁期间,可以被打断从等待队列里跳出来(如不想再等了);

解锁

mutex_unlock

信号量:semaphore,用的时候先定义一个信号量变量,如struct semaphore lock,然后再用函数去初始化这个信号量为一个值,然后用的时候去一次一次的减一。

和互斥锁很相似(互斥锁是一种特殊的信号量,只能被打开一次,A去打开了B就不能打开了,这就叫互斥。初始化值为1的信号量便是一个互斥锁),互斥锁的出现比信号量晚,实现上比信号量优秀,尽量使用互斥锁。

自旋锁:是在多核CPU的这个年代被发明的,专门应对多核CPU的

猜你喜欢

转载自www.cnblogs.com/zhangshuaifeng/p/10652535.html
今日推荐