同步互斥机制及自旋锁、互斥体

本文深入探讨了多线程环境下同步互斥机制的重要性,包括竞态条件的产生原因及解决方案,详细介绍了自旋锁和互斥体两种常用同步机制的工作原理、使用场景及相关函数。

一、同步互斥机制

应用场景:多线程的时候。当多个执行单元同时被执行,处理的是同一个资源时,就会导致竞态,这个时候就需要用同步或者互斥的方法来解决竞态。

线程和进程的区别:进程是拥有资源的最小单位,线程是参与调度的最小单位。

执行单元:进程、线程、SMP(对称多处理器)
资源:软件资源或者是硬件资源

并发:多个执行单元同时被执行。
竞态:多个执行单元同时被执行,处理的是同一个资源,就会导致竞态。

临界区:对资源进程操作的代码区
临界资源:可能会被多个执行单元同时访问并操作的资源
  • 导致竞态原因:

     1.多进程同时访问操作临界资源(进程和抢占它的进程之间会导致竞态)
     2.进程和中断
     3.对称多处理器
    
  • 解决竞态的方法:

     同步:强调的是顺序性
     互斥:强调的是排他性
    
  • 具体的解决方法:

     1.屏蔽中断
     2.自旋锁
     3.原子操作
     4.互斥体(互斥锁)
     5.信号量
    

二、自旋锁

头文件:linux/spinlock.h
自旋锁数据类型:spinlock_t

锁机制,完成互斥操作,和互斥锁类似

上自旋锁;
临界区;
解自旋锁;

自旋锁上锁后,会屏蔽掉进程抢占,如果进程1在临界区出现进程调度的相关函数(例如:sleep),就相当于放弃了CPU的执行权。这时,操作系统就会去调度其他进程(进程2),进程2在执行的时候需要进行上锁,但是进程1还没有释放锁,进程2就获取不到锁,会进入自旋状态,导致CPU会被100%占用。如果CPU是单核的,sleep函数结束后,进程1由于进程2(进入自旋状态)把CPU资源全部占用,解锁永远不会执行,就会导致死锁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值