DBUS 呼び出しがどのように同期または安全に行われるかについて疑問がありますか? これはより概念的な質問です。SOCKET ではこのような状況が発生しないことはわかっています。プロデューサがタスク (ソケット/パイプの recvfrm と sendfrm()) を終了しない限り、コンシューマはブロックされます。基本的に、プロデューサーとコンシューマーのジョブは、ソケットの両側でそれぞれ明確に定義されています。
これがシナリオです。実際、私は自分のプロジェクトで QT-DBUS を使用しています。ただし、これは QT DBUS に固有のものではないと思います。この質問は、どの DBUS にも当てはまります。
クラスの「GetTemperatureValue()」という関数があります。このクラスは、そのサービスを DBUS - "GetTemperatureValue()" に登録します。また、「GetTemperatureValue()」は DBUS クライアントから呼び出すことができます。ここで、「GetTemperatureValue()」によって返される値が定期的に変更されている場合。タイマーが非常に頻繁に温度値を変更しているとしましょう。クライアントが DBUS 呼び出しを介して "GetTemperatureValue()" という呼び出しを呼び出すと、ガベージ値が取得されません。保護がないため、返される温度値が壊れている可能性があります。ここで保護する必要はありますか?保護が必要な場合、どのように保護できますか?
これもqt-dbusの例です - http://www.tune2wizard.com/linux-qt-signals-and-slots-qt-d-bus/