У меня есть многопоточный TCP-клиент на C-проекте.
Каждый поток (кроме основного потока) отвечает за одного клиента, и у меня есть глобальный список, который содержит информацию о каждом клиенте (дескриптор файла сокета и т. Д.).
Основной поток всегда добавляет новые узлы в список при подключении нового клиента (этот поток добавляет новый элемент в начало списка).
Все остальные темы делают следующее:
Они часто сканируют список, чтобы получить дескрипторы сокетов всех клиентов, чтобы «передать» некоторые данные всем клиентам
Когда клиент отключается, ответственный поток удаляет клиентский узел в списке
Какой метод синхронизации больше всего подходит для этой проблемы?
Я уже думал о наличии мьютекса для каждого узла, и если потоку необходимо удалить узел из середины списка, он заблокирует 3 мьютекса (мьютекс удаляемого узла и мьютексы соседних узлов) , Но я также где-то видел, что условные переменные подходят для многопоточных списков.
Примечание: я бы хотел решение, которое не будет блокировать весь список, что сделает его недоступным для других потоков
Спасибо