D-Bus线程模型

问题描述:

我开始使用D-Bus作为Linux/KDE中新项目的IPC机制。我发现文档并没有真正解决并发问题。 D-Bus服务如何处理来自不同客户端的多个并发呼叫?什么是线程模型?服务可以假设它是单线程的,D-Bus会自行排队请求吗?D-Bus线程模型

作为一种协议,D-Bus并没有解决线程问题。

D-Bus连接按顺序接收消息。在协议级别,对消息的回复是异步的:即发送者在发送更多消息之前不必等待回复。

虽然原则上D-Bus实现可以同时向服务实现派发消息,但我不知道这是否有这样做。

通常,D-Bus实现(或“绑定”,如果您愿意的话)允许服务为每个方法(甚至每个方法调用)决定是否同步或异步响应传入的方法调用。这些细节取决于你正在使用的特定实现。

如果您异步响应方法调用,您的服务实现负责确保在多个响应处于待处理状态时任何状态保持一致。如果你总是同步响应,那么你知道你一次只能处理一个方法调用。

+1

谢谢。这与我在使用Qt绑定的Kubuntu中看到的一致。如果我在远程服务方法(插槽)中设置断点,然后从两个客户端调用断点,则第二个客户端将被完全阻止,直到我的代码处理完第一条消息。但我不确定我是否可以依靠这个。 – 2010-01-03 03:47:35