ThreadPool 实现问题 #35
Replies: 5 comments
-
我不认为这是好的改动,且你描述十分混乱。 |
Beta Was this translation helpful? Give feedback.
-
不好意思我现在中文能力不太好,我的意思就是任务队列如果使用std::function<void()>在这个程序中是足够的,使用std::packaged_task<void()>显得思维混乱。具体来说,using Task = std::packaged_task<void()>不是必须的,如果改成using Task = std::function<void()>,只改动这一处,程序依然可以正常编译,运行。参考:https://godbolt.org/z/5hc8zEzs1 |
Beta Was this translation helpful? Give feedback.
-
其实我主要是做了好几步类型擦除,擦除也就是通过包装。 之所以 然后插入到容器中
|
Beta Was this translation helpful? Give feedback.
-
倒也不是混乱,稍微想一下就能注意到无非是擦除了点类型,包装一下,Task 用什么都问题不大,这个无所谓。 |
Beta Was this translation helpful? Give feedback.
-
这个确实问题不大,使用packaged_task也不会有性能问题。总之我觉得不好的地方是使用std::packaged_task<void()> implies 这个变量使用多线程有关操作,但实际上没有使用相关功能。这个问题不大不改也行,就是我刚开始看的时候造成一些误解所以在这提出来。 |
Beta Was this translation helpful? Give feedback.
-
任务队列其实可以使用std::queue<std::function<void()>>,参考如下代码:
直接改写成std::function<void()> tasks_; 应该可以通过编译。
这里存在思维混乱问题,using Task = std::packaged_task<void()>; 其实根本没怎么使用,在创建共享指针时使用的是std::packaged_task<RetType()>, 我认为可能直接改成 using Task = std::function<void()>就对了。
Beta Was this translation helpful? Give feedback.
All reactions