我想知道为什么在新的 C++11 中他们添加了线程而不是进程。
他们不能围绕平台特定的功能做一个包装吗?
关于最便携的多处理方式有什么建议吗?叉子()?开放MP?
如果您可以使用 Qt,那么QProcess
类可能是一个优雅的平台独立解决方案。
如果您想以可移植的方式执行此操作,我建议您避免fork()
直接调用,而是编写自己的库函数,该函数可以映射到可用的系统的组合fork()
和exec()
系统上。如果你小心,你可以使你的函数具有与CreateProcess()
Win32 相同或相似的语义。
与基于 Windows 的系统相比,UNIX 系统在进程和进程管理方面往往采用完全不同的方法,因此除了最简单的包装器之外的所有东西都可移植并非易事。
当然,如果你有可用的 C++11 或 Boost,我会坚持下去。如果您没有任何全局变量(无论如何这通常是一件好事)并且没有以任何其他方式设置和共享数据,那么现代系统上线程和进程之间的实际差异很小。您创建的所有线程都可以以与进程相同的方式彼此独立地取得进展。
如果消息传递适合您的任务或批处理调度程序系统,您可以查看一个 MPI 实现。