自旋锁、互斥锁、信号量、原子操作

一、自旋锁

1.1解释

自旋锁和互斥锁比较类似,都是为了解决对 某项资源的互斥使用,无论是自旋锁还是互斥锁,在任何时刻,最多只能有一个保持者,使用互斥锁,如果资源申请者拿不到锁,那么只能进入睡眠状态,但是自旋锁不会引起调用者睡眠,会一直处于忙等待过程中,消耗cpu资源

二、互斥锁

2.1解释

是用来解决线程间的同步和互斥问题的一种机制,当一个线程占用了当前共享资源,使用互斥锁将其上锁后,其他线程无法访问,必须等到unlock之后,其他线程才能利用共享资源里的内容,互斥锁是睡眠的,不是忙等锁

三、信号量

3.1解释

是用来解决进程和线程之间同步和互斥问题的一种通信机制,保证两个或多个关键代码不被并发调用,信号量是选择休眠的方式对共享工作停止访问的。如果共享资源是可用的,那么信号量的值为正数,如果不可用,信号量的值为0,一共有两种操作:P操作(请求访问保护资源)和V操作(释放保护资源),P操作会使信号量-1,V操作会使信号量+1

四、原子操作

4.1解释

最小的不允许被其他中断打断的操作,一旦被其他中断打断就不能还原,原子操作常用来保护多线程操作变量值:

五、completion机制

5.1解释

轻量级的同步机制,允许一个线程告诉另一个线程某个工作已经做完了,但是效果比信号量好,具体好在什么地方,参考链接:

5.2使用方法

六、对比

6.1互斥锁和信号量对比

(1)信号量一般以同步的方式对共享资源进行控制,而互斥锁通过互斥的方式对共享资源进行控制

(2)信号量可以对进程的共享资源进行控制,而互斥锁不可以

(3)信号量的值为非负整数,而互斥锁的值只能为0或1

(4)互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到

6.2自旋锁和互斥锁的区别

(1)因为自旋锁不会引起调用者睡眠,所以效率比较高

(2)自旋锁比较适用于锁使用者保持锁时间比较短的情况

(3)自旋锁容易造成死锁,所以需要安全使用它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值