在单CPU系统中,处理器是一个共享资源。在多个进程之间共享处理器时,处理器的使用由调度程序控制,不存在竞争问题。但对于系统的其它资源而言,情况并非如此。不同的任务可能需要同时使用同一硬件外设或内存区域。如果不控制这些公共资源的访问,系统中很快就会出现资源争用问题。
如何在Semaphore(信号量)和Mutex(互斥)之间做选择,应考虑以下的问题:
1、资源类型:
- 多个实例:如果多个任务可以同时访问资源,请使用信号量。
- 单个实例:如果一次只有一个任务需要访问资源,请使用互斥。
2、访问模式:
-非排他性访问:如果多个任务可以同时访问资源,请使用信号量。
- 独家访问:如果只有一个任务需要独家访问资源,请使用互斥。
3、所有权要求:
- 需要所有权:如果您需要强制执行所有权,请使用互斥,确保只有获得互斥的任务才能释放它。
- 无需所有权:如果所有权不是问题,请使用信号量。
4、性能:
-开销:由于所有权跟踪和优先级反转预防机制,与信号量相比,Mutex通常具有更高的开销。
- 速度:对于简单的同步任务,信号量通常更快。
5、优先反转:
-优先级反转:Mutexes具有防止优先级反转的机制(例如优先级继承),这在实时系统中可能很重要。
-无优先级反转:信号量没有防止优先级反转的内置机制。
6、复杂性:
- 简单性:在基本同步任务中,信号量更易于使用和理解。
- 复杂性:由于所有权和优先级反转考虑,Mutex可能会更加复杂。
小结
-信号量:用于对资源的非排他性访问,以及当一个资源的多个实例可以同时访问时。
- 互斥:用于独家访问资源,当一次只能访问一个任务访问资源时。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !