我出于好奇而问这个。
Windows提供了他们称之为Fibers API的内容,它是轻量级用户进程/线程的API。
我很想知道Mac OS是否也提供了这样的功能。据我所知,与此类似的最接近的Unix将是setcontext
函数族。但是,尝试在Mac程序上调用此类API会产生警告,表示自OSX 10.6以来已弃用这些函数。此外,当我尝试编译并运行上面维基百科链接中提供的示例时,我在第一个swapcontext
上的机器上出现了段错误。
显然,setcontext
API对于Mac来说是不行的。至少不再是。有没有其他方法可以在Mac OS上实现轻量级用户端线程?系统是否提供此类功能?
答案 0 :(得分:3)
不,在OS X(或大多数基于UNIX的系统)上没有相应的东西。 POSIX标准不推荐使用ucontext
系列函数,但未提供替换功能。
OS X上最接近的是Grand Central Dispatch,它允许您创建执行'块'的调度队列。 (基本上是功能)。这些队列的处理可以暂停和恢复,类似于光纤,但是你不能在一个块的中间停止并恢复执行。
还有Boost.Context,它提供与ucontext
类似的功能(甚至可能在内部使用它),尽管它是一个C ++库。