【发布时间】:2015-07-24 23:17:45
【问题描述】:
为了启动另一个程序,我在代码中使用了 fork() 和 exec()。 由于我的程序使用 Threading Building Blocks 库进行任务管理,因此它之前使用线程池初始化调度程序。
每当我进行分叉时,似乎所有线程都被分叉了(检查顶部的线程数)。根据我在 Internet 上阅读的内容,只有当前线程应该被分叉。
我如何实现这种行为,线程构建块是否会导致多线程分叉?
【问题讨论】:
-
你说得对,
fork(2)只克隆当前线程。我猜这是 TBB 的一些功能,但我不熟悉它。关于分叉,我能找到的只是这个页面:adeptscience.co.uk/products/cpp/intel-threading-building-blocks - 它说 通过用户启用的 API 实现分叉安全,确保英特尔® TBB 工作线程在执行分叉之前完成。 也许您应该使用这个分叉 API?库可能需要在分叉之前进行一些清理/内务处理(很可能)。
标签: c++ multithreading unix fork tbb