У меня есть простой пул потоков, написанный на pthreads, реализованный с использованием пула блокировок, поэтому я знаю, какие потоки доступны.У каждого потока также есть условная переменная, которую он ожидает, поэтому я могу дать ему сигнал на выполнение работы.
Когда работа наступает, я выбираю поток, просматривая поиск доступного потока из пула блокировок.Затем я устанавливаю структуру данных, связанную с потоком, которая содержит работу, которую он должен выполнить, и сигнализирую переменной условия, что поток должен начать работать.
Проблема заключается в том, что поток завершает работу.Мне нужно разблокировать поток в пуле блокировок, чтобы он был доступен для дополнительной работы.Однако управляющий поток - это тот, который устанавливает блокировку, поэтому поток не может освободить эту блокировку сам.(И управляющий поток не знает, когда работа завершена.)
Есть предложения?
Я мог бы реорганизовать свой пул потоков, чтобы использовать очередь, в которой все потоки сигнализируются при работедобавлено, так что один поток может получить его.Однако в будущем сходство потоков, вероятно, станет проблемой для входящей работы, и пул блокировок облегчит реализацию этого.