Kalombyr
@Kalombyr

Как сделать неблокирующимся и потокобезопасным получение значения из класса в любой момент?

Есть объект в отдельном потоке, который достаточно быстро создаёт некоторое значение, пусть пока что просто счётчик.
Другие классы запрашивают значение по мере своей готовности.

Вопрос в том, как сделать, чтобы каждый класс "слушателя" мог получить значение в любой момент, при этом не блокируя поток генератора?

То есть, использование Мьютексов отпадает. Через сигналы слоты тоже не вариант, т.к. тогда генератор будет в холостую выпускать сигналы (а копировать значение затратно).

Думал писать сначала в одну переменную, потом в другую, но тогда всё равно может произойти запись в ту, которая сейчас считывается кем-то...
  • Вопрос задан
  • 36 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Многопоточность
Седой и строгий
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Напрямую можно безопасно обращаться только если в методе нет записи в память самого класса.
Если там просто счетчик то следует использовать мьютекс.
Можно организовать запрос-ответ по механизму сигнал слотов Qt.
Так же можно подключить сигнал слот с типом Qt:: BlockingQueuedConnection но это будет работать аналогично как с мьютексом.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы