spinlock 、semaphore和mutex的区别

本文详细介绍了三种并发控制机制:自旋锁、互斥量及信号量。自旋锁仅存在于内核态,采用忙等待方式;互斥量用于控制多线程对单一资源的访问;信号量则适用于线程同步,可用于用户态和内核态,支持设置资源数量并允许跨线程操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 spinlock(自旋锁):只有在内核态才有。并且他是忙等待,就是说不断的检测资源是否可访问。当资源被释放的时候执行相关操作

2 mutex(互斥量):控制多线程对某个资源的访问(同一时间只能有一个线程访问),当资源不可访问,线程就睡眠,当资源可访问的时候唤醒,但不能保证访问顺序。

3 semaphore(信号量):用户态和内核态都有,用作线程同步。初始化的时候可以设置资源数,比如Semaphore sp = new Semaphore(3);表明可以获取的资源数为3。并且可以由A线程获取,B线程释放。

若信号量值大于0,表示资源可使用,并且在使用后将信号量减1

信号量等于0表示没有资源可以使用。此时线程休眠。

在线程使用完毕后将信号量加1.此时若有休眠线程,则唤醒。

转载于:https://my.oschina.net/yizhangxyz/blog/760114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值