Objective C NSLock:在不同的线程上锁定和解锁NSLock

Giu*_*ppe 4 macos cocoa multithreading objective-c thread-safety

我需要在创建异步请求之前设置一个互斥锁,然后在另一个线程上的此请求的回调中解锁互斥锁.

Apple文档说:

警告:NSLock类使用POSIX线程来实现其锁定行为.向NSLock对象发送解锁消息时,必须确保从发送初始锁定消息的同一线程发送消息.从其他线程解锁锁定可能导致未定义的行为.

如何避免这种"未定义的行为"并使其按预期工作?

bbu*_*bum 6

更好的是; 使用NSOperationQueue或GCD队列作为同步原语.

锁是昂贵的,并且信号量或多或少是带有计数器的锁.

基于队列的编码效率更高,尤其是在使用内置排队机制时.


Jus*_*Sid 5

使用 aNSCondition来通知其他线程他们现在可以安全地通过。