临界区,互斥,竞争条件
公共资源
可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源。
临界区
程序要想使用某些资源,必然通过一些指令去访问这些资源,若多个任务都访问同一公共资源,那么各任务中访问公共资源的指令代码组成的区域就称为临界区。怕有同学看得不仔细,强调一下,临界区是指程序中那些访问公共资源的指令代码,即临界区是指令,并不是受访的静态公共资源。
互斥
互斥也可称为排他, 是指某一时刻公共资源只能被 1 个任务独享, 即不允许多个任务同时出现在自己的临界区中。公共资源在任意时刻只能被一个任务访问,即只能有一个任务在自己的临界区中执行,其他任务想访问公共资源时,必须等待当前公共资源的访问者完全执行完他自己的临界区代码后(使用完资源后)再开始访问。
竞争条件
竞争条件是指多个任务以非互斥的方式同时进入临界区, 大家对公共资源的访问是以竞争的方式并行进行的,因此公共资源的最终状态依赖于这些任务的临界区中的微操作执行次序。
非互斥条件下产生的错误行为
当多个任务“同时”读写公共资源时,也就是多个任务“同时”执行它们各自临界区中的代码时,它们以混杂并行的方式访问同一资源, 因此后面任务会将前一任务的结果覆盖, 最终公共资源的结果取决于所有任务的执行时序。这里所说的“同时”也可以指多任务伪并行,总之是指一个任务在自己的临界区中读写公共资源,还没来得及出来(彻底执行完临界区所有代码),另一个任务也进入了它自己的临界区去访问同一资源。
内容出自 郑钢 – 《操作系统真象还原》,详细了解具体内容还是得看原书,本人只是将部分内容摘录为学习笔记为用。