面试题答案
一键面试常见场景
- 文件资源竞争:多个进程同时尝试读写同一个文件。比如,进程A正在写入文件时,进程B也试图读取或写入该文件,可能导致数据不一致或文件损坏。
- 内存资源竞争:在共享内存区域,不同进程对同一块内存进行操作。例如,进程C向共享内存写入数据,进程D同时也在修改这块内存,造成数据混乱。
- 设备资源竞争:像打印机这类独占设备,多个进程都想使用它。若没有合理分配,可能导致打印任务混乱。
解决方式及原理
- 信号量(Semaphore)
- 原理:信号量是一个整型变量,通过一个计数器来控制对共享资源的访问。当进程想要访问共享资源时,先获取信号量(计数器减1)。若计数器为0,则表示资源已被占用,进程需等待。当进程使用完资源后,释放信号量(计数器加1),让其他进程有机会获取。例如,有一个信号量S初始值为1,代表某共享资源初始可用。进程P1获取S,S值变为0,此时其他进程不能获取,只能等待。P1使用完资源释放S,S值变回1,其他进程可获取。
- 互斥锁(Mutex)
- 原理:互斥锁本质上是一种特殊的二元信号量(值为0或1)。它用于保证在同一时刻只有一个进程能够访问共享资源,就像一把锁。当进程要访问共享资源时,先尝试获取互斥锁(将锁的状态设为已锁定)。若锁已被其他进程锁定,该进程就会阻塞等待。当进程使用完资源后,释放互斥锁(将锁的状态设为未锁定),让其他进程可以获取。例如,进程Q1获取互斥锁进入临界区访问共享资源,期间其他进程无法获取该锁,直到Q1释放锁。