C список многопоточной синхронизации - PullRequest
0 голосов
/ 11 мая 2019

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

  • Они часто сканируют список, чтобы получить дескрипторы сокетов всех клиентов, чтобы «передать» некоторые данные всем клиентам

  • Когда клиент отключается, ответственный поток удаляет клиентский узел в списке

Какой метод синхронизации больше всего подходит для этой проблемы? Я уже думал о наличии мьютекса для каждого узла, и если потоку необходимо удалить узел из середины списка, он заблокирует 3 мьютекса (мьютекс удаляемого узла и мьютексы соседних узлов) , Но я также где-то видел, что условные переменные подходят для многопоточных списков.

Примечание: я бы хотел решение, которое не будет блокировать весь список, что сделает его недоступным для других потоков

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...