Mac OS相当于Windows Fibers API?

gla*_*ert 6 c windows macos fiber

我出于好奇而问这个问题.

Windows提供了他们所谓的Fibers API,它是轻量级用户进程/线程的API.

我有兴趣知道Mac OS是否也提供了这样的功能.据我所知,与此类似的最接近的Unix将是setcontext函数族.但是,尝试在Mac程序上调用此类API会产生警告,表示自OSX 10.6以来已弃用这些函数.此外,当我尝试编译并运行上面维基百科链接中提供的示例时,我首先在我的机器上遇到了seg故障swapcontext.

显然,setcontextAPI是不适合Mac的.至少不再是.有没有其他方法可以在Mac OS上实现轻量级用户端线程?系统是否提供此类功能?

Col*_*nee 3

不,OS X(或大多数基于 UNIX 的系统)上没有等效项。这ucontext系列函数已被 POSIX 标准弃用,并且没有提供替代品。

在 OS X 上最接近的是Grand Central Dispatch,它允许您创建执行“块”(本质上是函数)的调度队列。这些队列的处理可以暂停和恢复,与纤程类似,尽管您无法在块的中间停止和恢复执行。

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