关于互斥信号量和二值信号量的区别
1个回答
展开全部
用于任务同步和中断同步,也可以实现互斥访问,但不具有优先级继承
通过二值信号量实现互斥访问:
1.创建3个任务task1,task2,task3,优先级分别是3,2,1.
2. 开始task3首先获得二值信号量资源,但task1优先级比task3高抢占了task3的cpu使用权
3. task1也需要获取二值信号量,所以task1就会挂起,等待task3释放二值信号量。
4. 由于 task2已经处于就绪态,并且优先级比task3高,task2抢占了task3的cpu使用权,此时优先级翻转就发生了,task1(高优先任务)需要等待task2(低优先任务)运行完后才能运行,task3任务继续执行并释二值信号量资源,task1才能获取到二值信号量,从而可以继续执行
互斥信号量简单说是具有优先级继承的二值信号量,用于进程中的互斥,不可用于中断中(1:具有优先级继承机制,2:中断服务函数不能因为等待互斥信号量而阻塞)
互斥信号量优先级继承机制:当一个低优先级的任务正在使用这个互斥信号量时,高优先的任务在等待这个互斥信号量的时候,高优先级的任务会将低优先级的任务的优先级提到和自己同一个水平,从而来避免位于低优先和高优先的任务抢占cpu时间运行,而导致次优先级任务先于高优先级的任务运行,引起优先级翻转。
优先级继承也只是尽可能的降低优先级翻转的发生,软件设计的时候需避免优先级翻转的问题发生
通过互斥信号量实现互斥访问:
1.一开始task3开始运行,先获取到互斥锁
2. task1开始运行尝试去获取互斥锁失败被阻塞等待task3执行完,但是此时提升task3的优先级,让其优先级跟自己一样
3.task3运行过程中,task2被触发,由于其优先级低于task3(第2步被提升过),task2等待运行
4.继续运行task3,运行完后释放互斥锁5.task1继续运行6.task1执行完,执行task2所以过程跟前面的虽然一样,但是互斥锁多做了一个步骤就是将task3的优先级提升到task1的级别,防止task2中途出来搅局浪费大量时间
通过二值信号量实现互斥访问:
1.创建3个任务task1,task2,task3,优先级分别是3,2,1.
2. 开始task3首先获得二值信号量资源,但task1优先级比task3高抢占了task3的cpu使用权
3. task1也需要获取二值信号量,所以task1就会挂起,等待task3释放二值信号量。
4. 由于 task2已经处于就绪态,并且优先级比task3高,task2抢占了task3的cpu使用权,此时优先级翻转就发生了,task1(高优先任务)需要等待task2(低优先任务)运行完后才能运行,task3任务继续执行并释二值信号量资源,task1才能获取到二值信号量,从而可以继续执行
互斥信号量简单说是具有优先级继承的二值信号量,用于进程中的互斥,不可用于中断中(1:具有优先级继承机制,2:中断服务函数不能因为等待互斥信号量而阻塞)
互斥信号量优先级继承机制:当一个低优先级的任务正在使用这个互斥信号量时,高优先的任务在等待这个互斥信号量的时候,高优先级的任务会将低优先级的任务的优先级提到和自己同一个水平,从而来避免位于低优先和高优先的任务抢占cpu时间运行,而导致次优先级任务先于高优先级的任务运行,引起优先级翻转。
优先级继承也只是尽可能的降低优先级翻转的发生,软件设计的时候需避免优先级翻转的问题发生
通过互斥信号量实现互斥访问:
1.一开始task3开始运行,先获取到互斥锁
2. task1开始运行尝试去获取互斥锁失败被阻塞等待task3执行完,但是此时提升task3的优先级,让其优先级跟自己一样
3.task3运行过程中,task2被触发,由于其优先级低于task3(第2步被提升过),task2等待运行
4.继续运行task3,运行完后释放互斥锁5.task1继续运行6.task1执行完,执行task2所以过程跟前面的虽然一样,但是互斥锁多做了一个步骤就是将task3的优先级提升到task1的级别,防止task2中途出来搅局浪费大量时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
富港检测东莞有限公司
2024-12-25 广告
2024-12-25 广告
正弦振动多用于找出产品设计或包装设计的脆弱点。看在哪一个具体频率点响应最大(共振点);做正弦振动找富港,富港工业检测技术有限公司是一家专业的第三方检测机构,拥有完善的质量管理体系,先进的检测设备,优秀的技术人才;已取得CNAS、CMA、IS...
点击进入详情页
本回答由富港检测东莞有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询