有什么公平锁和非公平锁
时间: 2024-01-10 09:04:13 浏览: 61
多线程(11)ReentrantLock公平锁与非公平锁(修改)1
公平锁和非公平锁是指在多线程环境下,对于共享资源的访问,是否按照先来先服务的原则分配。具体的区别如下:
1. 公平锁:按照请求的先后顺序来分配锁。如果有多个线程在等待同一个锁,那么在锁被释放的时候,等待时间最长的线程会获得锁。这样可以确保每个线程都有公平的机会获得锁,避免了某些线程一直处于饥饿状态。
2. 非公平锁:不考虑线程请求的先后顺序,直接将锁分配给其中一个线程。如果某个线程一直在等待锁,那么它可能永远也拿不到锁,这就是非公平锁的一个缺点。
在实现锁的时候,可以选择公平锁和非公平锁。一般情况下,非公平锁的性能比公平锁好,因为非公平锁不需要维护等待队列,而且当锁被释放时,直接将锁分配给其中一个线程,避免了线程上下文切换的开销。但是,如果对于一些需要公平竞争的场景,例如线程池中的任务调度,使用公平锁是更合适的选择。
阅读全文