IOS SDK - NSLock消息:"从没有锁定它的线程解锁"

Zig*_*yST 3 iphone synchronization objective-c nslock ios

我使用NSLock得到此错误,我试图通过使用unlockWithCondition(使用NSConditionLock)来规避,但无论我得到相同的结果:

*打破_NSLockError()进行调试.* - [NSLock unlock]:lock('(null)')从没有锁定它的线程解锁.

我不确定它是不是很糟糕,但我在做的是这样的:

new Thread:
[lockA lock];//waiting unlock
[lockB lock];//waiting unlock
..shared code..
[lockA unlock];
[lockB unlock];

in Main Thread:
//Do two HTTP request.

//when request respond, I unlock the locks in respective threads with [lockA unlock];
[lockB unlock];
Run Code Online (Sandbox Code Playgroud)

所以"..shared code .."部分可以执行.我不明白为什么我得到这个错误.

谁能解释我做错了什么?它看起来应该完美无缺.

Ste*_*mer 6

我想你在这里尝试使用锁作为信号量.锁意味着阻止后台线程和主线程同时访问某些内容.因此,持有锁的线程也必须释放(解锁)它.

如果您希望后台线程等待主线程上发生某些事情,请使用信号量.

使用GCD信号量获得简单易用的信号量:https://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html