gpt4 book ai didi

c++ - 在一个函数调用中创建一个线程池并从另一个函数调用中使用它

转载 作者:行者123 更新时间:2023-11-30 03:56:13 24 4
gpt4 key购买 nike

我有一个 Fortran 程序调用 C++ dll 对 10000 组数据进行一些数学运算。数据集彼此完全独立。我打算创建一个线程池,然后向它发送任务。但是dll的调用会超过1000次(每次调用处理10000组数据)。

我的问题是:当我在第一次调用 dll 期间创建线程池时,在 dll 中的函数返回后该线程池会发生什么情况?第二次调用(以及剩余的 998 次调用)能否访问在第一次调用期间创建的池。

最佳答案

如果设置正确,您确实可以使用相同的线程池。

在 FORTRAN->C++ 调用线程的堆栈上创建的对象将随着堆栈展开和控制权返回 FORTRAN 而被销毁,因此将线程池管理数据放在该堆栈上并不是一个好主意。但是,您可以:

  • 启动另一个创建线程池管理数据/对象的线程,或者
  • 在堆上分配(使用 new)以将生命周期与 FORTRAN->C++ 调用分离。

后者可能更简单、更清晰……指向管理线程池的堆对象/数据的指针可以返回给 FORTRAN 并用作 future 调用的“句柄”,表明应该使用相同的线程池。

关于c++ - 在一个函数调用中创建一个线程池并从另一个函数调用中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com