Closed firma2021 closed 1 year ago
用户的业务逻辑代码可能是千奇百怪、十分复杂的。有可能出现以下两种情况:
两个外部线程调用同一个线程池的waitForTasks()函数,此时会造成数据竞争,程序崩溃。 用户业务逻辑复杂的时候,我认为有可能需要这种用法。
用户向线程池提交了一个函数,这个函数中又去调用线程池的waitForTasks(),此时程序会永远阻塞。 这种用法或许有点儿愚蠢,,但至少您应该在文档中写明waitForTasks()不能提交给线程池执行。 用户代码量大的时候可能难以发现这个错误。线程池应该能检测出这种错误并提示用户。
#include "../hipe.h" using namespace hipe; void multithread_wait_task() { DynamicThreadPond pond (8); pond.submit([](){std::cout << "hello world!" << std::endl;}); std::thread trd { [&pond](){ pond.waitForTasks(); } }; pond.waitForTasks(); } void poolthread_wait_task() { DynamicThreadPond pond (8); pond.submit([&pond](){pond.waitForTasks(); }); pond.waitForTasks(); } int main() { multithread_wait_task(); poolthread_wait_task(); }
ok,两点我都在文档说明一下吧。然后我再全面地写一下哪些接口是可以被异步调用的。
用户的业务逻辑代码可能是千奇百怪、十分复杂的。有可能出现以下两种情况:
两个外部线程调用同一个线程池的waitForTasks()函数,此时会造成数据竞争,程序崩溃。 用户业务逻辑复杂的时候,我认为有可能需要这种用法。
用户向线程池提交了一个函数,这个函数中又去调用线程池的waitForTasks(),此时程序会永远阻塞。 这种用法或许有点儿愚蠢,,但至少您应该在文档中写明waitForTasks()不能提交给线程池执行。 用户代码量大的时候可能难以发现这个错误。线程池应该能检测出这种错误并提示用户。