Junior — Middle
What methods can be used to prevent or eliminate deadlock in a system?
sobes.tech AI
Answer from AI
A deadlock occurs when two or more threads are permanently waiting for each other to release resources. To prevent or resolve deadlocks, the following methods can be used:
- Avoid deadlocks: design the system so that threads do not acquire multiple resources simultaneously.
- Order resource acquisition: always acquire resources in the same order to avoid cyclic waiting.
- Use timeouts when acquiring locks: if a resource is unavailable for a certain period, release already acquired resources and retry.
- Use tryLock instead of lock: allows attempting to acquire a lock without blocking the thread, helping to avoid deadlocks.
- Detection and recovery: periodically check the system for deadlocks and take actions to resolve them (e.g., interrupt one of the threads).
Example of using tryLock in Java:
ReentrantLock lock1 = new ReentrantLock();
ReentrantLock lock2 = new ReentrantLock();
if(lock1.tryLock()) {
try {
if(lock2.tryLock()) {
try {
// work with resources
} finally {
lock2.unlock();
}
} else {
// failed to acquire lock2, handle accordingly
}
} finally {
lock1.unlock();
}
}