Mac OS相当于Windows Fibers API?

我好奇地问这个。

Windows提供了他们所说的Fibers API ,这是一个轻量级用户进程/线程的API。

我有兴趣知道Mac OS是否也提供这样的function。 据我所知,最接近的Unix相当于setcontext系列的函数。 然而,试图在Mac程序中调用这样的API会产生警告,说自OSX 10.6以后,这些函数就被弃用了。 此外,当我试图编译和运行上面的维基百科链接中提供的示例时,我的机器上第一个swapcontext出现seg错误。

所以显然, setcontext API是Mac的不行。 至less不会再有了。 有什么其他的方式来实现在Mac OS上轻量级的用户端线程? 系统是否提供这样的function?

不,在OS X(或大多数基于UNIX的系统)上没有相应的功能。 ucontext系列函数已经被POSIX标准所弃用,并且没有提供替换。

在OS X上最接近的是Grand Central Dispatch ,它允许你创建执行'blocks'(本质上是函数)的调度队列。 这些队列的处理可以暂停和恢复,类似于光纤,尽管你不能在块的中间停止和恢复执行。

还有Boost.Context ,提供与ucontext类似的功能(甚至可能在内部使用它),虽然它是一个C ++库。