Многопоточность и сокетное мультиплексирование (пул)
Я пишу серверную программу на C для академических целей.
Сервер запускает фиксированное число рабочих потоков во время инициализации, после чего потоки начинают ожидать "список запросов".
После этого сервер запускает бесконечный цикл, в котором он должен выполнить следующие две вещи:
- Проверьте наличие новых подключений
- Проверить на возможное
read()
на подключенных клиентах (только через select/poll, а не epoll) и удалите все читаемые файловые дескрипторы из набора (fd_set в случае, который мы использовалиselect()
или жеstruct pollfd*
в случае мы использовали опрос) и поместили его в список, где ожидают потоки.
Таким образом, рабочие потоки будут извлекать запросы из списка и обслуживать их. Каждый запрос требует неопределенной последовательности read()
а также write()
вызов.
Все, что я хотел бы понять, если существует потокобезопасный способ добавления и удаления файлового дескриптора из fd_set
или struct pollfd*
,