У меня есть приложение на C ++, в котором я создаю pthreads для запуска пользовательских функций. Я хочу быть в состоянии каким-либо образом получать уведомления при выходе из потока, чтобы я мог удалить его из массива pthread, который я использую для сохранения потоков. Есть ли способ сделать это, или функция должна просто установить какое-то «магическое значение». Поскольку мой основной код, который порождает pthreads, находится в некотором роде runloop, я легко могу проверить условие выхода.
Кроме того, используется ли перегрузка std::vector<pthread_t>
для отслеживания перегрузки моих потоков? Количество потоков не обязательно является каким-либо постоянным, может быть запущено много или очень мало потоков. Или есть другой контейнер STL, который был бы хорош для этих добавлений и удалений (добавления всегда на одном конце, удаления почти в любом месте). Есть ли какая-то другая структура для отслеживания pthreads? Будет ли стек или список прямо здесь? Или стандартный массив C с максимальным благом? Из-за характера проблемы я также мог бы поддерживать массив рабочих потоков фиксированного размера, которому я передаю пользовательские функции, которые должны быть выполнены. Это хорошее решение?
Извините за длинный запутанный вопрос, но я работал только с потоками в динамических языках, где это никогда не было бы проблемой.
РЕДАКТИРОВАТЬ (3/08/12):
Прочитав ответ @ jojojapan, я решил использовать своего рода пул потоков. В моей структуре у меня есть один производитель (поток в цикле выполнения) и много потребителей (рабочие потоки в пуле). Существует ли структура данных, предназначенная для многопоточного многопользовательского использования одного производителя? Или просто использовать std::queue
с pthread_mutex_t
на нем?