面试题答案
一键面试- 操作系统计数器初始值:
- 初始值应设为1。因为互斥锁的本质是保证同一时间只有一个线程能访问共享资源,初始值为1表示有一个“可用资源”(即锁是可用的)。
- 线程获取锁时对计数器的操作:
- 线程尝试获取锁时,先对操作系统计数器进行减1操作。
- 如果减1后计数器的值大于等于0,说明获取锁成功,该线程可以访问共享资源。
- 如果减1后计数器的值小于0,说明锁已被其他线程占用,该线程需要等待。可以通过阻塞线程,放入等待队列等方式等待锁的释放。
- 线程释放锁时对计数器的操作:
- 线程访问完共享资源后释放锁,对操作系统计数器进行加1操作。
- 加1后检查等待队列,如果有线程在等待,唤醒等待队列中的一个线程(通常按照一定的调度策略,如FIFO等),让其有机会再次尝试获取锁(重新对计数器减1操作)。