У меня есть сомнения по поводу того, как вызовы DBUS синхронизированы или сделаны безопасными? Это скорее концептуальный вопрос.
Я знаю, что такая ситуация не возникнет в розетках. Потребитель блокируется, если производитель не выполнил свою задачу — recvfrm и sendfrm () в сокетах / каналах. В основном, работа производителя и потребителя четко определена здесь с двух сторон сокета соответственно.
Вот сценарий. На самом деле, я использую QT-DBUS в моем проекте. Тем не менее, я думаю, что это не относится к QT DBUS. Этот вопрос актуален для любого DBUS.
Существует функция с именем — «GetTemperaValue ()» класса. Этот класс регистрирует свой сервис в DBUS — «GetTemperaValue ()». И «GetTemperaValue ()» вызывается из клиента DBUS. Теперь, если значение, возвращаемое функцией «GetTemperaValue ()», периодически меняется. Допустим, таймер очень часто меняет значение температуры. Если между ними клиент вызывает вызов — «GetTemperaValue ()» через вызов DBUS, он не получит значение мусора. Поскольку защита отсутствует, возвращаемое значение температуры может быть повреждено. Нужна ли здесь защита? Если требуется защита, как мы можем это сделать?
Вот также пример qt-dbus — http://www.tune2wizard.com/linux-qt-signals-and-slots-qt-d-bus/
Задача ещё не решена.