可扩充类型handle
扩充类型object
, program
, domain
,coroutine
,timer
,socket
,share_value
,sync_object
, ref_value
等类型都是扩充自handle,
如果需要扩充自己的类型,则应继承自handle
handle
handle翻译为“句柄”,也就是“把手”的意思,可以理解为用来方便控制某个东西的东西。
Handle用于管理某个Resource
- 通过引用计数确保Resource指针有效
- 通过Handle上的Lock确保Resource相关操作的线程安全
- HandlePtr 内部用一个64bit的整形表示,包含类型,索引分页,索引偏移,版本 信息
- 创建handle的时候,引用计数初始值为1
Handle的组织结构
字段 | 大小 | 描述 |
---|---|---|
m_state | 1Byte | Handle的状态,有UNUSED,OPENED,CLOSED,这个只是Handle状态,Resource自己应该也有状态 |
m_ref | 4Byte | Handle的引用计数,创建时初始值为1 |
m_handle_id | 8Byte | Handle对应的ID,64位非负整形,包含Handle的类型/索引/版本信息 |
m_resource | 8Byte | Handle对应的资源指针 |
m_lock | 不定 | 不同的Lock实现大小可能不同,用来实现资源的锁定和解锁,确保共享数据线程安全 |
m_entry | 不定 | 额外的自定义信息,如Object就会额外存放domain,看确定是否在当前域,这样可以免去引用计数和锁 |