многопоточность — C ++ Thread-Safe Object

Это может показаться невероятно простым вопросом, но во всех моих исследованиях я не смог найти четкого примера …

Я пытаюсь создать собственный класс с закрытыми переменными, доступными с помощью функций получения и установки. Этот класс будет создан один раз в глобальной области видимости (extern) и будет служить кешем данных в моем приложении. Он будет использоваться многими потоками одновременно, 99% для чтения, и скорость чрезвычайно важна. Есть ли способ разрешить одновременное чтение и просто заблокировать запись? (Я предполагаю, что нет)

Я просто включаю ограниченный мьютекс в качестве первой строки метода получения и установки? Или как лучше спроектировать этот, казалось бы, простой объект? Буду очень признателен за любые примеры или ссылки (мне трудно обдумать это).

У меня есть Boost, скомпилированный, так что его можно использовать.

Я очень ценю это!

6

Решение

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

Чтобы обеспечить одновременное чтение, изучите блокировки Readers-Writer, которые обеспечивают именно тот уровень синхронизации, который вы хотите. Я думаю boost::shared_mutex отвечает всем требованиям.

Так как это кеш, если вы в состоянии вынести устаревшие значения, возможно, стоит с точки зрения производительности изучить его РКО, или чтение-копирование-обновление. Там по крайней мере одна библиотека для пользовательского пространства RCU.

9

Другие решения

Других решений пока нет …