Deadlock is a situation when two or more threads are waiting on each other to be completed causing both to be locked and not able to continue.
A practical example of a deadlock is
Let’s see an example in swift.
here, the the queue is exeucting with q.async first, inside the block it calls for q.sync. So the outer block can only complete when the inner block q.sync is finished, but q.sync cannot start, because it is a sync block unless the thread is free. This results in a deadlock and the process will crash.
import Foundation
class Resource {
private(set) var value: Int
private let q = DispatchQueue(label: "myQueue")
init(_ value: Int) {
self.value = value
}
// Deadlock
func set(_ value: Int) {
q.async {
print("async")
self.q.sync {
self.value = value
print("sync") // outer block is waiting for this inner block to complete,
// inner block won't start before outer block finishes
// => deadlock
}
print("finished") // this will never be reached
}
}
}
let r = Resource(100)
r.set(200)
print("final value \(r.value)")
// Output
// async
// Execution Interrupted due to deadlock