Skip to content

Commit e183c84

Browse files
committed
Use packaged_task directly without unique_ptr
progschj#51
1 parent f9b1774 commit e183c84

File tree

4 files changed

+7
-12
lines changed

4 files changed

+7
-12
lines changed

.gitmodules

Lines changed: 0 additions & 3 deletions
This file was deleted.

ThreadPool.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef THREAD_POOL_H
22
#define THREAD_POOL_H
33

4-
#include <function2/function2.hpp>
4+
#include <functional>
55
#include <future>
66
#include <queue>
77

@@ -16,7 +16,7 @@ class ThreadPool {
1616
// need to keep track of threads so we can join them
1717
std::vector< std::thread > workers;
1818
// the task queue
19-
std::queue< fu2::unique_function<void()> > tasks;
19+
std::queue< std::packaged_task<void()> > tasks;
2020

2121
// synchronization
2222
std::mutex queue_mutex;
@@ -34,7 +34,7 @@ inline ThreadPool::ThreadPool(size_t threads)
3434
{
3535
for(;;)
3636
{
37-
fu2::unique_function<void()> task;
37+
std::packaged_task<void()> task;
3838

3939
{
4040
std::unique_lock<std::mutex> lock(this->queue_mutex);
@@ -59,19 +59,19 @@ auto ThreadPool::enqueue(F&& f, Args&&... args)
5959
{
6060
using return_type = std::invoke_result_t<F, Args...>;
6161

62-
auto task = std::make_unique< std::packaged_task<return_type()> >(
62+
std::packaged_task<return_type()> task(
6363
std::bind(std::forward<F>(f), std::forward<Args>(args)...)
6464
);
6565

66-
std::future<return_type> res = task->get_future();
66+
std::future<return_type> res = task.get_future();
6767
{
6868
std::unique_lock<std::mutex> lock(queue_mutex);
6969

7070
// don't allow enqueueing after stopping the pool
7171
if(stop)
7272
throw std::runtime_error("enqueue on stopped ThreadPool");
7373

74-
tasks.emplace([task = std::move(task)]() { (*task)(); });
74+
tasks.emplace(std::move(task));
7575
}
7676
condition.notify_one();
7777
return res;

meson.build

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ project('ThreadPool', ['cpp'], default_options : ['cpp_std=c++17'])
22

33
threads_dep = dependency('threads')
44

5-
executable('example', sources : ['example.cpp'], dependencies : [threads_dep],
6-
include_directories : [include_directories('subprojects/function2/include')])
5+
executable('example', sources : ['example.cpp'], dependencies : [threads_dep])
76

87
install_headers('ThreadPool.h')

subprojects/function2

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)