Есть основной поток в приложении и дополнительный. Они работают с одними и теми же данными.Основной поток данные может читать и изменять, а дополнительный их только читает, но не изменяет.
Если идет изменение данных, то никто не должен иметь права читать, а если идет чтение, то нельзя изменять данные, при этом основной поток не должен блокироваться (сообщения должны как бы собираться в очередь), для дополнительного потока блокирование допускается.
Как такое можно реализовать? Мысль ясно надеюсь выразил?
В какую сторону рыть?