3

我想知道为什么在新的 C++11 中他们添加了线程而不是进程。

他们不能围绕平台特定的功能做一个包装吗?

关于最便携的多处理方式有什么建议吗?叉子()?开放MP?

4

3 回答 3

3

如果您可以使用 Qt,那么QProcess类可能是一个优雅的平台独立解决方案。

于 2012-05-15T14:21:31.020 回答
3

如果您想以可移植的方式执行此操作,我建议您避免fork()直接调用,而是编写自己的库函数,该函数可以映射到可用的系统的组合fork()exec()系统上。如果你小心,你可以使你的函数具有与CreateProcess()Win32 相同或相似的语义。

与基于 Windows 的系统相比,UNIX 系统在进程和进程管理方面往往采用完全不同的方法,因此除了最简单的包装器之外的所有东西都可移植并非易事。

当然,如果你有可用的 C++11 或 Boost,我会坚持下去。如果您没有任何全局变量(无论如何这通常是一件好事)并且没有以任何其他方式设置和共享数​​据,那么现代系统上线程和进程之间的实际差异很小。您创建的所有线程都可以以与进程相同的方式彼此独立地取得进展。

如果消息传递适合您的任务或批处理调度程序系统,您可以查看一个 MPI 实现。

于 2012-05-15T14:16:58.403 回答
0

我正在使用Boost Interprocess

它不提供创建新进程的可能性,但是一旦它们存在,它就允许它们进行通信。

在这种特殊情况下,我可以从 shell 脚本创建我需要的进程。

于 2014-03-07T16:26:04.310 回答