编程接口指南

事件操作

通过事件操作,可以针对内存访问事件实现进程同步。如果进程无法使用 rsm_intr_signal_wait() 函数,则可以多路复用事件等待,方法是通过 rsm_memseg_get_pollfd() 获取轮询描述符并使用 poll 系统调用。


注 –

使用 rsm_intr_signal_post()rsm_intr_signal_wait() 操作时需要处理对内核的 ioctl 调用。


传递信号

int rsm_intr_signal_post(void *memseg, uint_t flags);

void 指针 *memseg 可以将类型转换为导入段句柄或导出段句柄。如果 *memseg 引用导入句柄,则此函数会向导出进程发送信号。如果 *memseg 引用导出句柄,则此函数会向该段的所有导入者发送信号。如果已针对目标段暂挂此事件,则将 flags 参数设置为 RSM_SIGPOST_NO_ACCUMULATE 可废弃此事件。

返回值:如果成功,则返回 0。否则返回错误值。

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_REMOTE_NODE_UNREACHABLE

无法访问远程节点

等待信号

int rsm_intr_signal_wait(void * memseg, int timeout);

void 指针 *memseg 可以将类型转换为导入段句柄或导出段句柄。进程的阻塞时间最多可达到 timeout 毫秒,或在事件发生之前一直阻塞。如果值为 -1,则进程在事件发生之前或中断之前会一直阻塞。

返回值:如果成功,则返回 0。否则返回错误值。

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_TIMEOUT

计时器已到期

RSMERR_INTERRUPTED

等待已中断

获取 pollfd

int rsm_memseg_get_pollfd(void *memseg, struct pollfd *pollfd);

此函数可用于通过指定段的描述符以及 rsm_intr_signal_post() 所生成的单个固定事件初始化指定的 pollfd 结构。将 pollfd 结构用于 poll 系统调用可等待 rsm_intr_signal_post 所通知的事件。如果当前未发布内存段,则 poll 系统调用无法返回有效的 pollfd。每次成功调用都会递增指定段的 pollfd 引用计数。

返回值:如果成功,则返回 0。否则返回错误值。

RSMERR_BAD_SEG_HNDL

段句柄无效

释放 pollfd

int rsm_memseg_release_pollfd(oid *memseg);

此调用可递减指定段的 pollfd 引用计数。如果引用计数为非零值,则取消发布、销毁或取消映射段的操作会失败。

返回值:如果成功,则返回 0。否则返回错误值。

RSMERR_BAD_SEG_HNDL

段句柄无效