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