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++ 库。
出于好奇我问这个。
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++ 库。