Dispatcher

As the last item, we have the Dispatcher class itself:

    #pragma once    #ifndef DISPATCHER_H    #define DISPATCHER_H    #include "abstract_request.h"    #include "worker.h"    #include <queue>    #include <mutex>    #include <thread>    #include <vector>    using namespace std;    class Dispatcher {        static queue<AbstractRequest*> requests;        static queue<Worker*> workers;        static mutex requestsMutex;        static mutex workersMutex;        static vector<Worker*> allWorkers;        static vector<thread*> threads;        public:        static bool init(int workers);        static bool stop();        static void addRequest(AbstractRequest* request);        static bool addWorker(Worker* worker);     };     #endif 

Most of this will look familiar. As you will have surmised by now, this is a fully static class.

Moving on, its implementation ...

Get Mastering C++ Multithreading now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.