我最近一直在使用 Wayland 协议,许多功能都包含一个unit32_t serial
参数。这是来自wayland-client-protocol.h的示例:
struct wl_shell_surface_listener {
/**
* ping client
*
* Ping a client to check if it is receiving events and sending
* requests. A client is expected to reply with a pong request.
*/
void (*ping)(void *data,
struct wl_shell_surface *wl_shell_surface,
uint32_t serial);
// ...
}
此参数的目的是让客户端响应pong
显示服务器,将 的值传递给它serial
。服务器会将serial
它通过 ping 接收到的数据pong
与serial
它通过 ping 发送的数据进行比较。
还有许多其他函数包含这样的serial
参数。此外,API 中其他函数的实现通常会在执行某些工作之前增加全局wl_display->serial
属性以获取新值。我的问题是,一般意义上serial
,这个serial
参数的基本原理是什么?它有名字吗?例如,这是 IPC 的事情,还是事件驱动/异步编程中的常见做法?是不是有点像用于异步方法调用的 XCB“cookie”概念?这种技术是否在其他程序中找到(请引用示例)?
另一个例子是 glut,glutTimerFunc
这里讨论的是“异步调用的常用习语”。我很想知道这个成语是否有名字,以及它在哪里(请引用好)被讨论为异步/偶数驱动编程中的最佳实践或技术,例如延续或“信号和槽”。或者,例如,共享资源计数如何只是整数,但我们认为它们是“信号量”。