首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective-C中的无锁消息队列

Objective-C中的无锁消息队列
EN

Stack Overflow用户
提问于 2011-03-27 03:52:17
回答 2查看 1.1K关注 0票数 1

我的iOS应用程序需要将数据从图形线程发送到音频线程。这些数据包(表示要合成的声音)需要存储,直到音频线程准备好对它们执行操作。最明显的数据结构是一个队列,其中图形线程推到头部,音频线程从尾部拉出。音频线程是实时运行的,任何锁定都可能导致声音故障。有没有一种没有锁的线程安全的方法来做到这一点?

我已经试过performSelector:onThread:withObject:waitUntilDone了,但没有成功。我认为这是因为音频线程没有相关的run循环。

在我看来,我可以在这里构建一个类似于c数组的环形缓冲区,它将保存指向我的消息的指针,其中生产者线程负责移动写磁头,而消费者线程负责移动读磁头。我如何才能确保这样的东西实际上是线程安全的?The wikipedia on non-blocking algorithms提到无锁环缓冲区是可以在不使用低级(汇编)代码的情况下实现的,但我对线程如何共享机器的控制权的理解不够有信心,无法确保我正在实现的东西实际上是线程安全的。

EN

回答 2

Stack Overflow用户

发布于 2011-03-27 13:52:35

听起来像是NSOperationQueue的工作。

阅读Apple的并发编程指南开始吧。

票数 1
EN

Stack Overflow用户

发布于 2011-03-27 14:58:11

时间限制并不像你想的那样关键。您有足够的时间(在合理范围内)来提供缓冲区。

我建议你先实现一个常规的锁定队列。这可能不是问题。如果是这样的话,锁定可能不会成为瓶颈。我已经做了大量的音频工作,包括实现了许多你想要做的事情,并且使用锁没有问题。

也就是说,我确信有一种方法可以使用OSAtomic.h中的原语实现一个无锁的线程安全队列。这是一个很好的blog post

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

https://stackoverflow.com/questions/5444895

复制
相关文章

相似问题

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