1.一种多线程访问方法,其特征在于,所述方法包括:响应于线程对函数对象的访问,调用全局锁的全局临界区对象对全局键值对表进行加锁,所述全局锁配置在预先创建的全局变量中,所述全局键值对表包括锁对象和与其对应的键值之间的对应关系;
获取线程调用所述全局锁加锁时的键值;
根据所述加锁时的键值查找所述全局键值对表,以获取与该键值对应的锁对象;
调用所述全局锁的全局临界区对象对所述全局键值对表进行解锁;
判定所述线程是否已经获取到所述锁对象;
若所述线程已经获取到所述锁对象,则对所述锁对象对应的加锁次数计数器加一;
若所述线程没有获取到所述锁对象,则调用所述锁对象为所述线程访问的函数对象进行加锁。
2.根据权利要求1所述的方法,其特征在于,当所述线程完成对所述函数对象的访问后,所述方法还包括:调用全局锁的全局临界区对象对所述全局键值对表进行加锁;
获取线程调用所述全局锁解锁时的键值;
根据所述解锁时的键值查找所述全局键值对表,以获取与该键值对应的锁对象;
判定所述线程是否已经获取到所述锁对象;
若所述线程已经获取到所述锁对象,则对所述锁对象对应的加锁次数计数器减一;
调用所述全局锁的全局临界区对象对所述全局键值对表进行解锁。
3.根据权利要求2所述的方法,其特征在于,所述判定所述线程是否已经获取到所述锁对象,包括:判定所述锁对象对应的标识字段中是否存在所述线程的线程标识,所述标识字段用于记录获取到所述锁对象的线程的线程标识;
若所述标识字段中存在所述线程的线程标识,则确定所述线程获取到锁对象。
4.根据权利要求3所述的方法,其特征在于,在调用所述锁对象为所述线程访问的函数对象进行加锁之后,所述方法还包括:将所述线程的线程标识添加到所述锁对象对应的标识字段。
5.根据权利要求3所述的方法,其特征在于,在对所述锁对象对应的加锁次数计数器减一之后,所述方法还包括:当所述加锁次数计数器的计数值更新为0时,将所述锁对象对应的标识字段进行初始化,并调用所述锁对象为所述线程访问的函数对象进行解锁。
6.根据权利要求1或2所述的方法,其特征在于,若没有从所述全局键值对表中查找到与加锁时的键值对应的锁对象,则创建新的锁对象,为创建的锁对象生成用于记录当前线程加锁次数的加锁次数计数器;以及将创建的新的锁对象、该锁对象与指定的键值之间的对应关系添加到所述全局键值对表。
7.根据权利要求2所述的方法,其特征在于,所述全局键值对表中的每一锁对象设置有用于记录引用次数的引用计数;
在所述判定所述线程是否已经获取到所述锁对象之前,所述方法还包括:对获取到的锁对象对应的引用计数进行加一;
相应的,在对所述锁对象对应的加锁次数计数器减一之后,所述方法还包括:对获取到的锁对象对应的引用计数进行减一;
根据更新后的引用计数判定所述锁对象是否存在线程调用,若所述锁对象不存在线程调用,则释放所述锁对象,并从所述全局键值对表中移除所述锁对象、所述锁对象与对应键值之间的对应关系。
8.一种多线程访问装置,其特征在于,所述装置包括:第一加锁模块,用于响应于线程对函数对象的访问,调用全局锁的全局临界区对象对全局键值对表进行加锁,所述全局锁配置在预先创建的全局变量中,所述全局键值对表包括锁对象和与其对应的键值之间的对应关系;
获取模块,用于获取线程调用所述全局锁加锁时的键值;
查找模块,用于根据所述加锁时的键值查找所述全局键值对表,以获取与该键值对应的锁对象;
第一解锁模块,用于调用所述全局锁的全局临界区对象对所述全局键值对表进行解锁;
判断模块,用于判定所述线程是否已经获取到所述锁对象;
第二加锁模块,用于当所述线程已经获取到所述锁对象时,对所述锁对象对应的加锁次数计数器加一,当所述线程没有获取到所述锁对象时,调用所述锁对象为所述线程访问的函数对象进行加锁。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一项所述方法的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述方法的步骤。