嵌入式指南--操作系统(二)并发和互斥

1.读写锁的定义?
读写锁,一种锁分为两种形态,读状态和写状态,读写锁是专门为大多数读状态情况而设计的。这种情况下,读写锁可以提供比其他锁(比如互斥锁,自旋锁等)更大的扩张性,因为读写锁允许同一时刻多个读任务同时持有锁。增加读任务的并发性。
特征:写锁优先级高,写独占,读共享
1.写模式加锁时,解锁前,所有对该线程加锁的线程都会被阻塞。
2.读模式加锁时,如果线程是读加锁则成功,如果线程是写加锁会阻塞。
3.读锁、写锁并行阻塞时,写锁优先级高,即解锁后优先执行写锁操作。
2.死锁的定义
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
3.死锁产生的原因
1.产生了竞争资源
2.进程推进顺序非法
4.死锁的4个必要条件
1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。
5.死锁的解决方式及如何避免死锁
1.加锁顺序(线程按照一定的顺序加锁)
2.加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
3.死锁检测
6.为什么要有并发及互斥的控制,如何实现?
并发(Concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(RaceConditions)。
解决竞态问题的途径是保证对共享资源的互斥访问, 所谓互斥访问就是指一个执行单元 在访问共享资源的时候,其他的执行单元都被禁止访问。 访问共享资源的代码区域被称为临界区, 临界区需要以某种互斥机 制加以保护, 中断屏蔽,原子操作,自旋锁,和信号量都是 linux 设备驱动中可采用的互斥途径。
7.单核CPU写多线程程序是否需要加锁?
在单核机器上写多线程程序,仍然需要线程锁。因为线程锁通常用来实现线程的同步和通信。在单核机器上的多线程程序,仍然存在线程同步的问题。因为在抢占式操作系统中,通常为每个线程分配一个时间片,当某个线程时间片耗尽时,操作系统会将其挂起,然后运行另一个线程。如果这两个线程共享某些数据,不使用线程锁的前提下,可能会导致共享数据修改引起冲突。
8.自旋锁和信号量的区别
信号量:信号量本质上是一个整数值,和PV函数一起使用保证临界区的原子性。在linux内核中用于互斥。信号量可以被休眠

自旋锁:不能被休眠(如中断处理程序),一个自旋锁是一个互斥设备,它只能是两个值,锁定和解锁。自旋锁通常比信号量性能更高,但当存在自旋锁时,等待执行忙循环的处理器做不了任何有用的工作。

区别:
1、 信号量允许阻塞,可以使用于临界区大的情况。自旋锁会导致死循环,锁定期间不允许阻塞,因此要求锁定的临界区小;

2、 信号量在进程获取不到的时候,不会自旋而是进入睡眠的等待状态。自旋锁实际上是忙等待,自旋锁可能导致系统死锁,自旋锁期间不能调用可能引起调度的函数。

9.自旋锁和信号量是否能用于中断
中断要求快速响应,不能睡眠,信号量会进入睡眠,因此要用自旋锁。

每天进步一点点,侵删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值