How do I use NSConditionLock? Or NSCondition

Viewed 31992

I am try to make one function wait for another, and I would like to use NSCondionLock in order to accomplish this. I am not asking for help, but really hoping someone could show me a decent tutorial or example to explain NSConditionLock, or possibly suggest a better method.

4 Answers

Swift 5 version of @vilanovi answer from Playground:

let myCondition = NSCondition()

var someCheckIsTrue = false

func method1() {
    print("STARTING METHOD 1")

    print("WILL LOCK METHOD 1")
    myCondition.lock()
    print("DID LOCK METHOD 1")

    while (!someCheckIsTrue) {
        print("WILL WAIT METHOD 1")
        myCondition.wait()
        print("DID WAIT METHOD 1")
    }

    print("WILL UNLOCK METHOD 1")
    myCondition.unlock()
    print("DID UNLOCK METHOD 1")

    print("ENDING METHOD 1")
}

func method2() {
    print("STARTING METHOD 2")

    print("WILL LOCK METHOD 2")
    myCondition.lock()
    print("DID LOCK METHOD 2")

    someCheckIsTrue = true

    print("WILL SIGNAL METHOD 2")
    myCondition.signal()
    print("DID SIGNAL METHOD 2")

    print("WILL UNLOCK METHOD 2")
    myCondition.unlock()
    print("DID UNLOCK METHOD 2")

    print("ENDING METHOD 2")
}

DispatchQueue.global().async {
    method1()
}

DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 0.5) {
    method2()
}
Related