我需要在创建异步请求之前设置一个互斥锁,然后在另一个线程上的此请求的回调中解锁互斥锁。
Apple文档说:
警告:NSLock类使用POSIX 线程实现其锁定 行为。发送解锁时 消息到NSLock对象,您必须 确保从该邮件发送消息 发送初始锁的同一个线程 信息。解锁一个锁 不同的线程可以导致 未定义的行为。
如何避免这种“未定义的行为”并使其按预期工作?
答案 0 :(得分:6)
更好;使用NSOperationQueue
或GCD队列作为同步原语。
锁是昂贵的,信号量或多或少是锁定计数器。
基于队列的编码效率更高,尤其是在使用内置排队机制时。
答案 1 :(得分:3)
请勿使用互斥锁。使用初始化为1的信号量或允许跨线程通信/锁定的其他锁定机制。
RGDS, 马丁
答案 2 :(得分:3)
使用NSCondition
来表示他们现在可以安全通过的其他线程。