Задать вопрос
@Dead_Bit

Потокобезопасный контейнер?

Имеется некоторый контейнер, содержащий в себе указатели на экземпляры пользовательского класса. Также, имеется 1 поток (назовём его модификатор), добавляющий и удаляющий элементы контейнера и N потоков, делающих обход элементов и производящих с ними определённые действия (назовём их хэндлерами). Задача заключается в том, чтобы сделать данный контейнер потокобезопасным и при этом обеспечить модификатору приоритетный доступ к контейнеру. То есть, если хэндлеры в количестве K штук ожидают доступа к контейнеру и в этот момент доступ запрашивает модификатор, то необходимо переместить модификатор в начало очереди ожидания и предоставить ему доступ первым.
  • Вопрос задан
  • 252 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Посмотрите на библиотеку для очереди задач https://github.com/seanmiddleditch/jobxx/blob/deve...
Может это и есть то что вам нужно.
Основная идея в том, что мы не блокируем очередь надолго, это значит что "модификатор" всегда сможет положить туда новую задачу почти без ожидания.
Ответ написан
@tugo
Композицией или наследованием делаете свой класс контейнера с методами получения и размещения объекта.
Методы делаете многопоточными с помощью Read Write Mutex.
Есть ли такие мьютексы в стандартной библиотеке не знаю.
https://www.youtube.com/watch?v=KJS3ikoiLso
https://doc.qt.io/archives/qq/qq11-mutex.html#unde...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы