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