I have a thread pool with submit:
template<typename F, typename... Args>
void submit(F f, Args... args) {
auto work = [f,args...]() { f(args...); };
work_queue.push_back( work );
}
And I need to pass function from a non-copyable class or an object of this class as an argument. What I have already tried is to pass a unique pointer, it works if I directly put it in function, but not when I do it via submit
std::unique_ptr<Dispatcher> valuePtr(new Dispatcher(5));
index_file(buffer, conf, std::ref(res), std::ref(mutex), std::move(valuePtr)); \\ work
t.submit(index_file, buffer, conf, std::ref(res), std::ref(mutex), std::move(valuePtr)); \\ don't work, because submit calls to deleted constructor of valuePtr
void index_file(const std::string &filename, const configuration_t &conf, std::atomic<int> &res, std::mutex &m,
std::unique_ptr<Dispatcher> d) {
// some code
d->addMap(map);
}
I can't do function addMap
static as it adds elements to the queue in Dispatcher
. Also, I can't make Dispatcher
copyable, because it uses mutex.