ABAP之共享内存(shared memory)

一、shared memory相关概念

共享内存:是存在于应用程序服务器的一块内存区域,层次高于abap内存和sap内存(前者仅适用于内部会话internal session之间的数据传输,后者适用于external session外部会话和内部会话的数据传输)。不考虑角色权限,任意用户的任意程序都可访问共享内存区域。

区域根类:即启用共享内存的类,通过se21创建,需声明shared memory enabled或者勾选共享内存标识。必须分配接口IF_SHM_BUILD_INSTANCE。

区域类:通过SHMA创建,为cl_abap_meoory_area的子类。需在根类和构造器类处绑定之前建立的区域根类。

区域抓手:即区域类的实例r_handle,只需声明不用create,通过 area handle r_handle说明在区域 r_handle中创建对象,为了处理区域中创建的对象,需用区域类中的set_root()方法绑定根类对象r_root。

data: r_handle type ref to cl_abap_meoory_area,
      r_root type ref to cl_abap_my_root. "se21创建,必须分配接口IF_SHM_BUILD_INSTANCE

r_handle = cl_abap_meoory_area => attach_For_write(). "设置更改锁
*r_handle = cl_abap_meoory_area => attach_For_update(). "设置更改锁

create object r_root area handle r_handle. "说明在区域 r_handle中创建对象r_root.

r_handle->set_root(r_root)."为了处理区域实例 r_handle中创建的对象

相关锁概念:共享内存中系统通过读锁和写锁实现版本控制,读锁可以并行获取,写锁独占。读锁可通过attach_For_read()语句被多个对象并行占有,通过deatch()释放。写锁即更改锁,通过attach_For_write()或attach_For_update()语句占有,通过deatch_commit()释放。

*更改锁加锁、释放
r_handle = cl_abap_meoory_area => attach_For_write(). "设置更改锁
*r_handle = cl_abap_meoory_area => attach_For_update(). "设置更改锁

r_handle => deatch_commit(). "更改锁释放

*读锁加锁、释放

r_handle = cl_abap_meoory_area => attach_For_read(). "设置读锁,防止读过程中对象被删除

r_handle => deatch(). "读锁释放

区域实例版本:共享内存中可以同时存在几个区域实例r_handle的版本,数量可能限制,活动版本只存在一个,过时版本可以存在多个,过期版本被垃圾回收器删除可忽略。读锁加锁时,读取共享对象中的数据,版本为活动版本,此时若更改锁加锁,区域实例版本被激活,另外生成设置中版本,在更改锁释放后,设置中版本转为活动版本,其他读锁所在版本转为过时版本,在读锁释放后,过时版本转为过期版本被垃圾回收器删除。在写锁释放频率快于读锁释放频率时,可以同时存在多个过时版本。

二、具体步骤和相关语法

可参考以下文章,非常详细。

SAP Shared Object Demo 02 - 宁海峰 - 博客园 (cnblogs.com)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值