Mac OS 相当于 Windows 纤维 API?

Mac OS equivalent of the Windows Fibers API?

出于好奇我问这个。

Windows 提供了他们所谓的 Fibers API,这是针对轻量级用户 processes/threads.

的 API

我很想知道 Mac OS 是否也提供此类功能。据我所知,最接近的 Unix 等价物是 setcontext 函数族。但是,尝试在 Mac 程序上调用这样的 API 会产生警告,指出这些函数自 OSX 10.6 以来已被弃用。此外,当我尝试编译和 运行 上面维基百科 link 中提供的示例时,我的机器在第一个 swapcontext.

处出现段错误

显然 setcontext API 不适合 Mac。至少不再是了。 Mac OS 有没有其他方法可以实现轻量级用户端线程?系统是否提供这样的功能?

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

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

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