6

我是出于好奇而问这个的。

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

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

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

4

1 回答 1

3

不,OS X(或大多数基于 UNIX 的系统,就此而言)没有等价物。该ucontext系列功能已被 POSIX 标准弃用,并且没有提供替代品。

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

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

于 2015-05-21T05:23:43.590 回答