【发布时间】:2015-07-29 10:31:13
【问题描述】:
我是出于好奇才问这个的。
Windows 提供了他们所谓的Fibers API,这是一个用于轻量级用户进程/线程的 API。
我很想知道 Mac OS 是否也提供这些功能。据我所知,与此最接近的 Unix 将是 setcontext 系列函数。但是,尝试在 Mac 程序上调用此类 API 会产生警告,指出这些函数自 OSX 10.6 以来已被弃用。另外,当我尝试编译和运行上面维基百科链接中提供的示例时,我的机器上的第一个swapcontext 出现了段错误。
显然setcontext API 不适用于 Mac。至少不再了。有没有其他方法可以在 Mac OS 上实现轻量级的用户端线程?系统是否提供这样的功能?
【问题讨论】:
-
你看过 Grand Central Dispatch 吗?
-
@ScottHunter,我知道一些 GCD 框架。但它是否允许例如在工作线程之间手动切换,就像使用光纤一样?我不认为 GCD 可以被视为等同于用户端线程...
-
我不一定会这么快就放弃 Mac OS setcontext() ... 已弃用的功能通常仍然有效;它们只是不能保证在未来的操作系统版本中得到支持。所以这可能只是调整一些细节以使 setcontext() 在 MacOS 下工作的问题。
-
有些 OS X C API 已被弃用,没有替代品,除非您使用 Obj-C。您通常可以忽略它们已弃用的警告。
-
@CollinDauphinee,是的,感谢您的意见。由于我要求这个主要是为了告知自己,我不受任何特定语言的约束。您是否碰巧知道是否在 Objective-C 中的 MacOS 上公开了类似 Fibers 的 API?