面试题答案
一键面试1. 互斥锁(Mutex)
- 原理:互斥锁是一种二元信号量,同一时刻只允许一个线程进入临界区,访问共享资源,从而避免资源竞争。
- 优点:
- 简单直观,易于理解和实现。在HTTP服务器场景中,对于简单的共享资源(如计数器记录活跃连接数),使用互斥锁能快速保证线程安全。
- 对应用程序的侵入性较小,只需在访问共享资源前后加锁解锁即可。
- 缺点:
- 性能开销较大。每次加锁解锁操作都需要操作系统进行上下文切换,在高并发场景下,频繁的加锁解锁会降低服务器的整体性能。
- 可能产生死锁。如果多个线程以不同顺序获取多个互斥锁,就可能导致死锁。例如,线程A获取锁1,线程B获取锁2,然后线程A尝试获取锁2,线程B尝试获取锁1,此时就会发生死锁。
2. 读写锁(Read - Write Lock)
- 原理:读写锁区分了读操作和写操作。允许多个线程同时进行读操作,因为读操作不会修改共享资源,不会产生数据不一致问题。但只允许一个线程进行写操作,且在写操作时不允许其他线程进行读或写操作。
- 优点:
- 在HTTP服务器中,如果有大量的读操作(如读取配置文件等共享资源)和少量的写操作(如更新配置文件),读写锁能显著提高性能。读操作可以并行执行,减少了线程等待时间。
- 相比于互斥锁,读写锁能更好地适应读多写少的场景,提高系统的并发处理能力。
- 缺点:
- 实现相对复杂,需要考虑读锁和写锁的获取、释放顺序以及优先级等问题。
- 如果写操作过于频繁,会导致读线程长时间等待,降低系统的整体性能。同时,读写锁同样存在死锁风险,例如写线程获取写锁后,读线程又尝试获取读锁,可能引发死锁。