首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C NSLock:在不同线程上锁定和解锁NSLock

目标C NSLock:在不同线程上锁定和解锁NSLock
EN

Stack Overflow用户
提问于 2011-06-23 15:56:21
回答 3查看 4K关注 0票数 4

我需要在发出异步请求之前设置一个互斥,然后在另一个线程上的这个请求的回调中解锁互斥。

苹果公司的文件显示:

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

我怎样才能避免这种“未定义的行为”,并使它像预期的那样工作呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-23 16:56:36

更好的方法是:使用NSOperationQueue或GCD队列作为同步原语。

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

基于队列的编码效率要高得多,特别是在使用内置队列机制时。

票数 7
EN

Stack Overflow用户

发布于 2011-06-23 16:12:30

为此使用NSCondition来向其他线程发出信号,这些线程现在可以安全地通过。

票数 5
EN

Stack Overflow用户

发布于 2011-06-23 16:10:58

不要用互斥物来做这个。使用初始化为1或其他允许跨线程通信/锁定的锁机制的信号量。

雷格斯·马丁

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6457045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档