利索能及
我要发布
收藏
专利号: 2018103268138
申请人: 武汉斗鱼网络科技有限公司
专利类型:发明专利
专利状态:已下证
更新日期:2026-05-14
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种多线程访问方法,其特征在于,所述方法包括:

响应于线程对函数对象的访问,调用全局锁的全局临界区对象对全局键值对表进行加锁,所述全局锁配置在预先创建的全局变量中,所述全局键值对表包括锁对象,和所述锁对象与所述全局键值对表对应的键值之间的对应关系;

获取线程调用所述全局锁加锁时的键值;

判定所述全局键值对表中是否存在与加锁时的键值对应的锁对象,所述全局键值对表中的每一锁对象设置有用于记录引用次数的引用计数器;

若所述全局键值对表中不存在与加锁时的键值对应的锁对象,则创建新的锁对象,为所述新的锁对象生成引用计数器并将该引用计数器的计数值加1,并将创建的锁对象以及所述锁对象与指定的键值之间的对应关系添加到所述全局键值对表;

调用所述全局临界区对象对所述全局键值对表进行解锁;

调用创建的新的锁对象为所述线程访问的函数对象进行加锁。

2.根据权利要求1所述的方法,其特征在于,当所述线程完成对所述函数对象的访问后,所述方法还包括:调用所述全局临界区对象对所述全局键值对表进行加锁;

获取线程调用所述全局锁解锁时的键值;

根据解锁时的键值查找所述全局键值对表,以获取与所述解锁时的键值对应的锁对象;

调用获取到的锁对象对所述线程访问的函数对象进行解锁,并对获取到的锁对象的引用计数器的计数值减一;

根据更新后的引用计数判定获取到的锁对象是否存在线程调用,若获取到的锁对象不存在线程调用,则释放该锁对象;

调用所述全局临界区对象对所述全局键值对表进行解锁。

3.根据权利要求2所述的方法,其特征在于,在所述释放所述锁对象之后,所述方法还包括:从所述全局键值对表中移除所述锁对象以及所述锁对象和与其对应的键值之间的对应关系。

4.根据权利要求1-3任一项所述的方法,其特征在于,所述全局键值对表为哈希表、线性表、或树状表中的任意一个。

5.一种多线程访问装置,其特征在于,所述装置包括:

第一加锁模块,用于响应于线程对函数对象的访问,调用全局锁的全局临界区对象对全局键值对表进行加锁,所述全局锁配置在预先创建的全局变量中,所述全局键值对表包括锁对象,和所述锁对象与所述全局键值对表对应的键值之间的对应关系;

获取模块,用于获取线程调用所述全局锁加锁时的键值;

判定模块,用于判定所述全局键值对表中是否存在与加锁时的键值对应的锁对象,所述全局键值对表中的每一锁对象设置有用于记录引用次数的引用计数器;

配置模块,用于当所述全局键值对表中不存在所述键值对应的锁对象时,创建新的锁对象,为所述新的锁对象生成引用计数器并将该引用计数器的计数值加1,并将创建的锁对象以及所述锁对象与指定的键值之间的对应关系添加到所述全局键值对表;

第一解锁模块,用于调用所述全局临界区对象对所述全局键值对表进行解锁;

第二加锁模块,用于调用创建的新的锁对象为所述线程访问的函数对象进行加锁。

6.根据权利要求5所述的装置,其特征在于,所述第一加锁模块,还用于当所述线程完成对所述函数对象的访问后,调用所述全局临界区对象对所述全局键值对表进行加锁;

所述获取模块,还用于获取线程调用所述全局锁解锁时的键值;

所述装置还包括:

查找模块,用于根据解锁时的键值查找所述全局键值对表,以获取与所述解锁时的键值对应的锁对象;

第二解锁模块,用于调用获取到的锁对象对所述线程访问的函数对象进行解锁,并对获取到的锁对象的引用计数器的计数值减一;

所述配置模块,还用于根据更新后的引用计数判定获取到的锁对象是否存在线程调用,若获取到的锁对象不存在线程调用,则释放该锁对象;

所述第一解锁模块,还用于调用所述全局临界区对象对所述全局键值对表进行解锁。

7.根据权利要求6所述的装置,其特征在于,所述配置模块,还用于在释放所述锁对象之后,从所述全局键值对表中移除所述锁对象以及所述锁对象和与其对应的键值之间的对应关系。

8.根据权利要求5-7任一项所述的装置,其特征在于,所述全局键值对表为哈希表、线性表、或树状表中的任意一个。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4任一项所述方法的步骤。

10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-4任一项所述方法的步骤。