Моя программа имеет две темы:
- Основной поток выполнения, который обрабатывает ввод пользователя и ставит в очередь записи в базу данных
- служебный поток, который просыпается каждую секунду и сбрасывает записи в базу данных
Внутри основного потока мне иногда нужно выполнить чтение в базе данных. Когда это происходит, производительность не важна, но правильность. (В идеальном мире я читал бы из кеша, а не совершал круговую поездку в базу данных - но давайте отложим это для обсуждения.)
Как мне убедиться, что основной поток видит правильную / неактивную базу данных?
Стандартный мьютекс не будет работать, так как я рискую заставить основной поток захватить мьютекс до того, как данные будут сброшены в базу данных. Это было бы большой гонкой.
Что я действительно хочу, так это какой-нибудь мьютекс, который позволяет основному потоку выполнения выполняться только ПОСЛЕ того, как мьютекс был захвачен и освобожден один раз. Существует ли такая вещь? Как лучше всего решить эту проблему?
ОБНОВЛЕНИЕ: После некоторых дополнительных исследований я мог бы использовать Условная переменная Boost для решения этой проблемы. Либо так, либо просто прикуси пулю и кешируй мои записи. Спасибо за отзыв!