如何在iOS上实现协同程序
我将一个C ++项目移植到iOS上以用于iPhone和iPad。 该项目广泛使用Boost.Coroutine库。 Boost.Coroutine没有针对iPhone的ARMv6 / ARMv7指令集的实现。
有没有其他的协同程序库可以在iOS上运行?
如果没有,是否有可能在ARM上编写协程行为? 我可以看到一些可能的方法来做到这一点:
注意:Unity支持iOS上的C#中的协程; 我不确定这是否仅限于典型协程行为的较小子集。 如果没有,这是否意味着Unity有一个解决方案?
你几乎肯定不想编写汇编指令来执行堆栈操作。 iOS已经在第三版ARM指令集中,从ARMv6通过ARMv7过渡到ARMv7s。 从iPhone 5开始,Apple进一步添加了人造屏障,您可能无法使用支持完整iPhone 5屏幕的ARMv6分支提交应用程序。 我相信苹果的动机是确保它可以在未来某个时候转换到没有ARMv6兼容模式的处理器,但对于我们的开发者来说,它显然意味着不会过分依赖特定的指令集。
这留下了线索。 iOS拥有一套完善的开发线程机制,pthread可以展示相关的子集。 Grand Central Dispatch通常是现在用来确保不同任务可以同时发生的常规解决方案,因此吞噬了大部分Internet文档,但仍保留较低级别的解决方案。
显而易见的简单例子,使用NSConditionLock:
- (void)methodOnThread1
{
while(1)
{
[conditionLock lockWhenCondition:kMoreInputAvailable];
// process whatever is currently in the common access pool
[conditionLock unlockWithCondition:kWaitingForInput];
}
}
- (void)methodOnThread2
{
while(1)
{
// do whatever is necessary to produce more input,
// creating it locally and taking as long as it takes
[conditionLock lockWhenCondition:kWaitingForInput];
// push input to common access pool, by whatever means
[conditionLock unlockWithCondition:kMoreInputAvailable];
}
}
boost.coroutine(来自Oliver Kowalke;上个月来自boost社区)使用boost.context,它支持ARMv6(ARM Cortext Ax)
链接地址: http://www.djcxy.com/p/53187.html上一篇: How to implement Coroutines on iOS
下一篇: Throughput differences when using coroutines vs threading