如何在Semaphore(信号量)和Mutex(互斥)之间做选择?

描述

 

在单CPU系统中,处理器是一个共享资源。在多个进程之间共享处理器时,处理器的使用由调度程序控制,不存在竞争问题。但对于系统的其它资源而言,情况并非如此。不同的任务可能需要同时使用同一硬件外设或内存区域。如果不控制这些公共资源的访问,系统中很快就会出现资源争用问题。

处理器

如何在Semaphore(信号量)和Mutex(互斥)之间做选择,应考虑以下的问题:

1、资源类型:

- 多个实例:如果多个任务可以同时访问资源,请使用信号量。

- 单个实例:如果一次只有一个任务需要访问资源,请使用互斥。

2、访问模式:

-非排他性访问:如果多个任务可以同时访问资源,请使用信号量。

- 独家访问:如果只有一个任务需要独家访问资源,请使用互斥。

3、所有权要求:

- 需要所有权:如果您需要强制执行所有权,请使用互斥,确保只有获得互斥的任务才能释放它。

- 无需所有权:如果所有权不是问题,请使用信号量。

4、性能:

-开销:由于所有权跟踪和优先级反转预防机制,与信号量相比,Mutex通常具有更高的开销。

- 速度:对于简单的同步任务,信号量通常更快。

5、优先反转:

-优先级反转:Mutexes具有防止优先级反转的机制(例如优先级继承),这在实时系统中可能很重要。

-无优先级反转:信号量没有防止优先级反转的内置机制。

6、复杂性:

- 简单性:在基本同步任务中,信号量更易于使用和理解。

- 复杂性:由于所有权和优先级反转考虑,Mutex可能会更加复杂。

小结

-信号量:用于对资源的非排他性访问,以及当一个资源的多个实例可以同时访问时。

- 互斥:用于独家访问资源,当一次只能访问一个任务访问资源时。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分