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.
An object that coordinates the operation of multiple threads of execution within the same application.
NSRecursiveLock defines a lock that may be acquired multiple times by the same thread without causing a deadlock, a situation where a thread is permanently blocked waiting for itself to relinquish a lock.
EDIT: as @Bonshington commented, this answer refers to NSCondition
(as opposed to NSConditionLock
):
- (void) method1 { [myCondition lock]; while (!someCheckIsTrue) [myCondition wait]; // Do something. [myCondition unlock]; } - (void) method2 { [myCondition lock]; // Do something. someCheckIsTrue = YES; [myCondition signal]; [myCondition unlock]; }
The someCheckIsTrue
can be anything, it could be a simple BOOL variable or even something like [myArray count] == 0 && color == kColorRed
, it doesn't matter. It only matters that in one method you check for a condition while you have the lock and in another method you make changes that can make the condition become true also while having the lock. The magic is the wait
and signal
part: the wait
actually unlocks the lock and reacquires it after some other thread called signal
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With