编程接口指南

屏障 (barrier) 操作

使用屏障 (barrier) 操作可以解决写入访问顺序内存模型问题。屏障 (barrier) 操作还可提供远程内存访问错误检测功能。

屏障 (barrier) 机制由以下操作组成:

打开和关闭操作定义了错误检测和排序的时间间隔。通过初始化操作,可以为每个导入的段创建屏障 (barrier) 并指定屏障 (barrier) 类型。当前支持的唯一屏障 (barrier) 类型针对每个段具有一个时间间隔范围。请使用类型参数值 RSM_BAR_DEFAULT

成功执行关闭操作可保证成功完成所涉及的访问操作,这些操作在屏障 (barrier) 打开操作和屏障 (barrier) 关闭操作之间进行。在屏障 (barrier) 打开操作之后直到屏障 (barrier) 关闭操作之前,不会报告单个数据访问操作(读取和写入)故障。

要在屏障 (barrier) 范围内强制设置特定的写入完成顺序,请使用显式屏障 (barrier) 排序操作。在屏障 (barrier) 排序操作之前发出的写入操作会先于在屏障 (barrier) 排序操作之后发出的操作完成。给定屏障 (barrier) 范围内的写入操作会根据其他屏障 (barrier) 范围进行排序。

初始化屏障 (barrier)

int rsm_memseg_import_init_barrier(rsm_memseg_import_handle_t im_memseg, rsm_barrier_type_t type, rsmapi_barrier_t *barrier);

注 –

目前,RSM_BAR_DEFAULT 是唯一支持的类型。


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

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_BAD_BARRIER_PTR

屏障 (barrier) 指针无效

RSMERR_INSUFFICIENT_MEM

内存不足

打开屏障 (barrier)

int rsm_memseg_import_open_barrier(rsmapi_barrier_t *barrier);

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

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_BAD_BARRIER_PTR

屏障 (barrier) 指针无效

关闭屏障 (barrier)

int rsm_memseg_import_close_barrier(rsmapi_barrier_t *barrier);

此函数可用于关闭屏障 (barrier) 并刷新所有存储缓冲区。此调用假设如果调用 rsm_memseg_import_close_barrier() 失败,则调用进程将重试自上次 rsm_memseg_import_open_barrier 调用以来的所有远程内存操作。

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

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_BAD_BARRIER_PTR

屏障 (barrier) 指针无效

RSMERR_BARRIER_UNINITIALIZED

未初始化屏障 (barrier)

RSMERR_BARRIER_NOT_OPENED

未打开屏障 (barrier)

RSMERR_BARRIER_FAILURE

内存访问错误

RSMERR_CONN_ABORTED

连接异常中止

排序屏障 (barrier)

int rsm_memseg_import_order_barrier(rsmapi_barrier_t *barrier);

此函数可用于刷新所有存储缓冲区。

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

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_BAD_BARRIER_PTR

屏障 (barrier) 指针无效

RSMERR_BARRIER_UNINITIALIZED

未初始化屏障 (barrier)

RSMERR_BARRIER_NOT_OPENED

未打开屏障 (barrier)

RSMERR_BARRIER_FAILURE

内存访问错误

RSMERR_CONN_ABORTED

连接异常中止

销毁屏障 (barrier)

int rsm_memseg_import_destroy_barrier(rsmapi_barrier_t *barrier);

此函数可用于取消分配所有屏障 (barrier) 资源。

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

RSMERR_BAD_SEG_HNDL

段句柄无效

RSMERR_BAD_BARRIER_PTR

屏障 (barrier) 指针无效

设置模式

int rsm_memseg_import_set_mode(rsm_memseg_import_handle_t im_memseg, rsm_barrier_mode_t mode);

此函数支持可用于 put 例程的可选显式屏障 (barrier) 范围。两种有效的屏障 (barrier) 模式为 RSM_BARRIER_MODE_EXPLICITRSM_BARRIER_MODE_IMPLICIT。屏障 (barrier) 模式的缺省值为 RSM_BARRIER_MODE_IMPLICIT。在隐式模式下,隐式屏障 (barrier) 打开和屏障 (barrier) 关闭会应用于每个 put 操作。将屏障 (barrier) 模式值设置为 RSM_BARRIER_MODE_EXPLICIT 之前,请使用 rsm_memseg_import_init_barrier 例程针对导入的段 im_memseg 初始化屏障 (barrier)。

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

RSMERR_BAD_SEG_HNDL

段句柄无效

获取模式

int rsm_memseg_import_get_mode(rsm_memseg_import_handle_t im_memseg, rsm_barrier_mode_t *mode);

此函数可用于获取 put 例程中屏障 (barrier) 范围设置的当前模式值。

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

RSMERR_BAD_SEG_HNDL

段句柄无效。