CN105786525B - 一种进程模型向线程模型移植代码的方法及装置 - Google Patents
一种进程模型向线程模型移植代码的方法及装置 Download PDFInfo
- Publication number
- CN105786525B CN105786525B CN201610170127.7A CN201610170127A CN105786525B CN 105786525 B CN105786525 B CN 105786525B CN 201610170127 A CN201610170127 A CN 201610170127A CN 105786525 B CN105786525 B CN 105786525B
- Authority
- CN
- China
- Prior art keywords
- thread
- global variable
- information
- address
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种进程模型向线程模型移植代码的方法及装置。包括:在进程模型的程序代码中设置全局变量对应的宏定义信息;获取线程模型中线程对应的全局变量信息;为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间;在线程模型的线程时域链表中,建立线程对应的时域记录。本发明通过设置全局变量的宏定义信息,存储线程对应的全局变量信息,建立线程对应的时域记录,来完成进程模型向线程模型的代码移植,后续通过对全局变量宏展开,根据线程对应的时域记录即可实现线程对全局变量的正确引用,避免对原程序代码中全局变量的大量修改,提高代码移植效率及程序代码的可维护性,降低移植出错率。
Description
技术领域
本发明涉及终端技术领域,具体而言,涉及一种进程模型向线程模型移植代码的方法及装置。
背景技术
目前,存在分别采用进程模型和线程模型的操作系统,如Linux系统即采用进程模型,VxWorks系统则采用线程模型。若要在采用线程模型的系统中实现采用进程模型的系统功能,需将进程模型的程序代码移植到线程模型中。
在进程模型中各个进程可以各自独立访问一套全局变量。而线程模型中全局变量对所有线程可见,若各线程需独立访问全局变量,则线程对应的全局变量名称必须唯一。因此将进程模型的程序代码移植到线程模型中时,需对程序代码中的全局变量进行处理,以使全局变量的调用符合线程环境的特点。当前,一般由技术人员对进程模型的程序代码进行修改,复制调用全局变量的代码,使这部分代码的数量与线程数目相等。且将复制的每部分代码中全局变量的名称修改为专有名称,使得每份代码中全局变量的名称均不相同。
但当全局变量数目很多时,修改代码的工作量很大,人工修改效率很低,且出错率很高。且由于多次代码复制,增加了代码复杂度,降低了程序代码的可维护性。
发明内容
有鉴于此,本发明实施例的目的在于提供一种进程模型向线程模型移植代码的方法及装置,避免对原程序代码中全局变量的大量人工修改,提高代码移植效率及程序代码的可维护性,降低移植出错率。
第一方面,本发明实施例提供了一种进程模型向线程模型移植代码的方法,所述方法包括:
在进程模型的程序代码中,设置全局变量对应的宏定义信息;
获取线程模型中线程对应的全局变量信息,所述全局变量信息包括线程对应的全局变量的名称、长度和变量值;
为所述线程对应的全局变量信息分配内存地址,将所述全局变量信息存储在所述内存地址对应的内存空间中;
在所述线程模型的线程时域链表中,建立所述线程对应的时域记录。
结合第一方面,本发明实施例提供了上述第一方面的第一种可能的实现方式,其中,所述获取线程模型中线程对应的全局变量信息,包括:
在线程模型中线程启动的代码处设置全局变量注册接口;
通过所述全局变量注册接口获取所述线程对应的全局变量信息。
结合第一方面,本发明实施例提供了上述第一方面的第二种可能的实现方式,其中,所述在所述线程模型的线程时域链表中,建立所述线程对应的时域记录,包括:
获取所述线程的线程标识;
在所述线程模型的线程时域链表中,存储所述线程标识、所述线程对应的全局变量的名称与所述内存地址的对应关系。
结合第一方面,本发明实施例提供了上述第一方面的第三种可能的实现方式,其中,所述建立所述线程对应的时域记录之后,还包括:
在预编译阶段,根据所述宏定义信息对程序代码中的全局变量宏展开为地址获取函数;
调用所述地址获取函数,根据所述线程的线程标识及所述线程对应的全局变量的名称,从所述线程时域链表中获取所述线程对应的内存地址;
根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息。
结合第一方面的第三种可能的实现方式,本发明实施例提供了上述第一方面的第四种可能的实现方式,其中,所述根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息,包括:
对所述内存地址进行解复用处理,得到解复用后的地址信息;
根据所述解复用后的地址信息,获取所述内存地址对应的内存空间中存储的全局变量信息。
第二方面,本发明实施例提供了一种进程模型向线程模型移植代码的装置,所述装置包括:
设置模块,用于在进程模型的程序代码中,设置全局变量对应的宏定义信息;
获取模块,用于获取线程模型中线程对应的全局变量信息,所述全局变量信息包括线程对应的全局变量的名称、长度和变量值;
分配存储模块,用于为所述线程对应的全局变量信息分配内存地址,将所述全局变量信息存储在所述内存地址对应的内存空间中;
建立模块,用于在所述线程模型的线程时域链表中,建立所述线程对应的时域记录。
结合第二方面,本发明实施例提供了上述第二方面的第一种可能的实现方式,其中,所述获取模块包括:
设置单元,用于在线程模型中线程启动的代码处设置全局变量注册接口;
第一获取单元,用于通过所述全局变量注册接口获取所述线程对应的全局变量信息。
结合第二方面,本发明实施例提供了上述第二方面的第二种可能的实现方式,其中,所述建立模块包括:
第二获取单元,用于获取所述线程的线程标识;
存储单元,用于在所述线程模型的线程时域链表中,存储所述线程标识、所述线程对应的全局变量的名称与所述内存地址的对应关系。
结合第二方面,本发明实施例提供了上述第二方面的第三种可能的实现方式,其中,所述装置还包括:
宏展开模块,用于在预编译阶段,根据所述宏定义信息对程序代码中的全局变量宏展开为地址获取函数;
调用获取模块,用于调用所述地址获取函数,根据所述线程的线程标识及所述线程对应的全局变量的名称,从所述线程时域链表中获取所述线程对应的内存地址;
引用模块,用于根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息。
结合第二方面的第三种可能的实现方式,本发明实施例提供了上述第二方面的第一种可能的实现方式,其中,所述引用模块包括:
解复用单元,用于对所述内存地址进行解复用处理,得到解复用后的地址信息;
第三获取单元,用于根据所述解复用后的地址信息,获取所述内存地址对应的内存空间中存储的全局变量信息。
在本发明实施例提供的方法及装置中,在进程模型的程序代码中设置全局变量对应的宏定义信息;获取线程模型中线程对应的全局变量信息;为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间;在线程模型的线程时域链表中,建立线程对应的时域记录。本发明通过设置全局变量的宏定义信息,存储线程对应的全局变量信息,建立线程对应的时域记录,来完成进程模型向线程模型的代码移植,后续通过对全局变量宏展开,根据线程对应的时域记录即可实现线程对全局变量的正确引用,避免对原程序代码中全局变量的大量修改,提高代码移植效率及程序代码的可维护性,降低移植出错率。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1A示出了本发明实施例1所提供的一种进程模型向线程模型移植代码的方法流程图;
图1B示出了本发明实施例1所提供的一种存储线程对应的全局变量的示意图;
图1C示出了本发明实施例1所提供的一种线程模型中线程引用全局变量的流程图;
图2示出了本发明实施例2所提供的一种进程模型向线程模型移植代码的装置结构示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
考虑到相关技术中由技术人员对进程模型的程序代码进行修改,当全局变量数目很多时,修改代码的工作量很大,人工修改效率很低,且出错率很高。且由于多次代码复制,增加了代码复杂度,降低了程序代码的可维护性。基于此,本发明实施例提供了一种进程模型向线程模型移植代码的方法及装置。下面通过实施例进行描述。
实施例1
本发明实施例提供了一种进程模型向线程模型移植代码的方法。进程模型的程序代码中通常包含各个进程共享的一套全局变量,各个进程可独立引用该套全局变量。在将进程模型的程序代码转换为能在线程模型中实现的程序代码,即从进程模型向线程模型移植代码时,需对进程模型的程序代码中的全局变量进行处理,以使全局变量的引用符合线程模型中各线程无法独立引用同一套全局变量的特点。本发明实施例提供的代码移植方法可以有效地对程序代码中的全局变量进行处理,实现进程模型向线程模型的转换,并减少代码移植过程中的人工干预,提高代码移植的效率,减少全局变量引用的出错率。
参见图1A,该方法具体包括以下步骤:
步骤101:在进程模型的程序代码中,设置全局变量对应的宏定义信息。
本发明实施例中,在进程模型的程序代码中设置全局变量对应的宏定义信息,该宏定义信息用于在程序编译或运行阶段将程序代码中的全局变量宏展开为地址获取函数,该地址获取函数用于获取全局变量对应的内存地址。
其中,设置全局变量对应的宏定义信息的设置位置可以为一个公共头文件中。为了便于理解上述全局变量对应的宏定义信息,下面举例进行说明。例如,假设全局变量ses为进程模型的程序代码中包含的一个全局变量,则在公共头文件中设置全局变量ses对应的宏定义信息,该宏定义信息可以为#define ses(*(struct sshsession*)sesvar_get("ses")),其中,struct sshsession为全局变量ses的类型,sesvar_get()为全局变量ses对应的地址获取函数。后续在程序编译阶段或运行阶段中,该宏定义信息用于将程序代码中出现的全局变量ses宏替换为地址获取函数sesvar_get()。就是用宏ses取代了代码里面所有的全局变量ses,而代码里面使用全局变量ses的地方就不需要做任何的修改即可正常使用。
本发明实施例中,可以由技术人员手动设置全局变量对应的宏定义信息。也可以由技术人员预先在终端中存储设置规则,终端获取到进程模型的程序代码后,检测程序代码中包含的全局变量,当检测到全局变量时,在公共头文件中处,根据预先存储的设置规则及检测到的全局变量,自动设置该全局变量对应的宏定义信息。
上述设置规则可以为宏定义信息由“#define”、全局变量的名称和全局变量对应的地址获取函数组成,其中全局变量对应的地址获取函数由全局变量的名称与“var_get()”组成。例如,假设终端检测到程序代码中包含全局变量A,则按照上述设置规则,生成该全局变量A对应的地址获取函数Avar_get(),然后按照上述设置规则生成全局变量A对应的宏定义信息#define A Avar_get(),并将该宏定义信息#define A Avar_get()自动添加在进程模型的程序代码的起始处。
在本发明实施例中,对于程序代码中包含的任一全局变量,都需按照本步骤提供的方式在程序代码中设置对应的宏定义信息。通过本步骤在程序代码中设置全局变量对应的宏定义信息后,还需通过如下步骤102-104的操作,对线程模型中全局变量的线程共享进行初始化处理。
步骤102:获取线程模型中线程对应的全局变量信息,该全局变量信息包括线程对应的全局变量的名称、长度和变量值。
上述线程对应的全局变量信息为进程模型的程序代码中各进程共享的全局变量。在将进程模型的程序代码向线程模型的程序代码移植时,为确保在线程模型中的执行结果与原进程模型的执行结果相同,则需将原各进程共享的全局变量转换为线程模型中各线程分别引用的全局变量。
在本发明实施例中,当系统开始运行时,对于线程模型中需共享全局变量的线程,在该线程启动的代码处增加全局变量注册流程,通过该全局变量注册流程进行全局变量的注册初始化。上述增加全局变量注册流程的过程,具体包括:
在线程模型中线程启动的代码处设置全局变量注册接口;通过该全局变量注册接口获取线程对应的全局变量信息。
上述全局变量注册接口可以为用于添加全局变量的函数,如添加函数Sesvar_add(),该全局变量注册接口的设置可以由技术人员在线程启动的代码处手动添加,也可以由终端自动检测线程启动的代码所处的位置,并在检测到的位置处自动添加该全局变量注册接口。本发明实施例中,在线程开始运行的地方调用全局变量注册接口,通过该全局变量注册接口注册线程需要引用的全局变量,获取线程需要引用的全局变量的名称、长度及变量值。
在本发明实施例中,线程模型中的其他每个需共享全局变量的线程在启动时,都按照上述方式进行全局变量的注册初始化。
在本发明实施例中,由于在线程启动的代码处设置全局变量注册接口,所以不会出现线程未进行全局变量的注册初始化就使用该线程的情况,所有线程在第一次使用的同时就进行了全局变量的注册初始化,如此可以降低全局变量的引用出错率。另外,全局变量注册接口的设置简单,对外只有这一个注册接口,简化了进程模型向线程模型移植代码的过程。
步骤103:为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间中。
获取到线程对应的全局变量信息之后,为该全局变量信息分配内存地址,将该全局变量信息存储在该内存地址对应的内存空间中。对于线程模型中的其他每个需共享全局变量的线程,均通过上述方式将其他每个需共享全局变量的线程对应的全局变量信息,分别存储在为其他每个线程分配的内存地址对应的存储空间中。如图1B所示,在线程模型中,对于共享全局变量的每个线程,均将线程对应的全局变量信息存储在线程对应的内存地址对应的存储空间中。
通过上述步骤102和103的操作存储线程对应的全局变量信息之后,还需通过如下104的操作来建立线程对应的时域记录,从而完成进程模型的程序代码向线程模型的程序代码的转换。
步骤104:在线程模型的线程时域链表中,建立线程对应的时域记录。
线程时域链表中包括多个线程的时域记录,在运行线程模型时,可根据线程的时域记录,自动获取到线程的全局变量信息对应的内存地址,从而根据该内存地址实现该线程对其全局变量信息中包括的全局变量的引用。
上述建立线程对应的时域记录的操作,具体包括:
获取线程的线程标识;在线程模型的线程时域链表中,存储线程标识、线程对应的全局变量的名称与内存地址的对应关系。
对于完成上述步骤102和103的全局变量信息的存储操作的线程,均通过步骤104的操作,在线程时域链表中建立对应的时域记录。
本发明实施例中,在创建线程时域链表的同时,还创建一个二进制信号量,该二进制信号量用于标识线程模型运行过程中,线程时域链表的访问状态,如当该二进制信号量取值为1时标识存在正在访问线程时域链表的线程,当该二进制信号量取值为0时标识不存在正在访问线程时域链表的线程。本发明实施例通过该二进制信号量来控制线程对线程时域链表的访问,防止访问冲突或访问拥堵,确保线程执行的顺畅及运行过程中数据读写的正确性。
通过上述步骤101-104的操作存储每个线程对应的全局变量信息,并在线程时域链表中建立线程对应的时域记录之后,即完成了进程模型向线程模型的代码移植,后续即可根据移植后的代码实现线程模型中线程对全局变量的正确引用。
在本发明实施例中,线程模型中线程对全局变量的引用过程,包括:
在预编译阶段,根据宏定义信息对程序代码中的全局变量宏展开为地址获取函数;调用地址获取函数,根据线程的线程标识及线程对应的全局变量的名称,从线程时域链表中获取线程对应的内存地址;根据该内存地址,引用该内存地址对应的内存空间中存储的全局变量信息。
上述引用内存地址对应的内存空间中存储的全局变量信息,具体包括:
对内存地址进行解复用处理,得到解复用后的地址信息;根据解复用后的地址信息,获取内存地址对应的内存空间中存储的全局变量信息。
为了进一步理解上述对全局变量的引用过程,下面结合图1C来具体进行说明。图1C中不仅仅是从系统运行的角度进行描述,还从编译的角度进行了描述,即图1C中的各流程步骤并不完全发生在系统运行阶段。
在图1C中,各步骤的操作依次为:
S1:线程代码执行到需获取全局变量引用的地方;
需注意的是,这是从代码表面上看到的,实际编译出来的代码并没有此全局变量的直接引用。
S2:在预编译阶段将全局变量用宏展开为地址获取函数的调用。
在移植前的进程程序代码中,全局变量的名称在编译过程中是作为一个全局变量处理的。但在代码移植处理之后,此全局变量实际上并不是一个具体的全局变量,而是一个宏定义,在预编译处理完成后,此全局变量的名称是要完成一个宏展开的。而宏展开的结果是要调用地址获取函数获取此全局变量对应的内存地址。地址获取函数需要的参数为此全局变量的名称及线程的线程标识。
S3:根据线程标识获取线程对应的时域记录。
根据线程的线程标识,从线程时域链表中查找该线程对应的时域记录。
S4:根据全局变量的名称在线程对应的时域记录中获取对应的内存地址。
此内存地址对应的存储空间中存放了此线程对应的全局变量信息。根据全局变量的名称在线程对应的时域记录中查找对应的内存地址可以有多种实现方式,本发明实施例中仅列举以下三种:
1,在全局变量节点中存放全局变量的字符串名称。在查找时,将传入的全局变量的字符串名称跟全局变量节点中存放的全局变量的名称进行比较。若两个字符串相同,则查找到了全局变量对应的内存地址。
2,在全局变量节点中存放的是全局变量字符串名称对应的内存地址。而传入的参数为专门保存的一份全局变量字符串名称的内存地址。即系统显式的保存一份此全局变量名称的全局变量。在查找时,传入的是此全局变量的内存地址,只需对传入的内存地址和全局变量节点中保存的内存地址进行比较即可。也就是说,查找的过程是以一个整形数据作为键值来进行比较查找的。
3,直接使用全局变量的字符串常量,全局变量的字符串常量经过编译处理后,会隐式在系统中的某个段中存放。可通过引用此全局变量的字符串常量,来直接引用对应的内存地址。
S5:对地址获取函数返回的内存地址解复用。
上述地址获取函数返回的内存地址无法直接使用,因为代码中是直接使用全局变量的引用。如果对此内存地址直接使用的话,编译器将会报错。因此需在此内存地址上退化为一个全局变量的直接引用,以达到在宏之外,能够对全局变量的直接引用。
例如:#define ses(*(struct sshsession*)sesvar_get(ses_str))是对全局变量ses的宏处理,其中*(struct sshsession*)即是对全局变量ses对应的内存地址的解复用,经过解复用后,外面对全局变量ses的实际使用代码就能直接编译运行而没有语法错误。
S6:编译器根据解复用后的内存地址引用此内存地址对应的存储空间中存储的全局变量,完成编译。
在本发明实施例中,使用宏扩展对全局变量进行替换,在宏处理中获取对应全局变量的内存地址并解复用,进程模型的原始程序代码中对全局变量的引用部分不必做任何代码级别的改动,只需要额外添加少量代码就可以完成代码移植。极大提高了移植的工作效率和可靠性。
在本发明实施例中,设置全局变量对应的宏定义信息;获取线程模型中线程对应的全局变量信息;为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间;在线程模型的线程时域链表中,建立线程对应的时域记录。本发明通过设置全局变量的宏定义信息,存储线程对应的全局变量信息,建立线程对应的时域记录,来完成进程模型向线程模型的代码移植,后续通过对全局变量宏展开,根据线程对应的时域记录即可实现线程对全局变量的正确引用,避免对原程序代码中全局变量的大量修改,提高代码移植效率及程序代码的可维护性,降低移植出错率。
实施例2
参见图2,本发明实施例提供了一种进程模型向线程模型移植代码的装置,该装置用于执行上述实施例1提供的进程模型向线程模型移植代码的方法。该装置具体包括:
设置模块201,用于在进程模型的程序代码中,设置全局变量对应的宏定义信息;
获取模块202,用于获取线程模型中线程对应的全局变量信息,全局变量信息包括线程对应的全局变量的名称、长度和变量值;
分配存储模块203,用于为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间中;
建立模块204,用于在线程模型的线程时域链表中,建立线程对应的时域记录。
上述获取模块202通过如下设置单元和第一获取单元来获取线程对应的全局变量信息。
设置单元,用于在线程模型中线程启动的代码处设置全局变量注册接口;
第一获取单元,用于通过全局变量注册接口获取线程对应的全局变量信息。
建立模块204通过如下第二获取单元和存储单元来建立线程对应的时域记录。
第二获取单元,用于获取线程的线程标识;
存储单元,用于在线程模型的线程时域链表中,存储线程标识、线程对应的全局变量的名称与内存地址的对应关系。
在本发明实施例中,建立模块204建立线程对应的时域记录之后,该装置还通过如下宏展开模块、调用获取模块及引用模块来实现线程模型中线程对全局变量的正确引用。
宏展开模块,用于在预编译阶段,根据宏定义信息对程序代码中的全局变量宏展开为地址获取函数;
调用获取模块,用于调用地址获取函数,根据线程的线程标识及线程对应的全局变量的名称,从线程时域链表中获取线程对应的内存地址;
引用模块,用于根据内存地址,引用内存地址对应的内存空间中存储的全局变量信息。
上述引用模块通过如下解复用单元和第三获取单元来引用线程对应的全局变量。
解复用单元,用于对内存地址进行解复用处理,得到解复用后的地址信息;
第三获取单元,用于根据解复用后的地址信息,获取内存地址对应的内存空间中存储的全局变量信息。
在本发明实施例中,设置全局变量对应的宏定义信息;获取线程模型中线程对应的全局变量信息;为线程对应的全局变量信息分配内存地址,将全局变量信息存储在内存地址对应的内存空间;在线程模型的线程时域链表中,建立线程对应的时域记录。本发明通过设置全局变量的宏定义信息,存储线程对应的全局变量信息,建立线程对应的时域记录,来完成进程模型向线程模型的代码移植,后续通过对全局变量宏展开,根据线程对应的时域记录即可实现线程对全局变量的正确引用,避免对原程序代码中全局变量的大量修改,提高代码移植效率及程序代码的可维护性,降低移植出错率。
本发明实施例所提供的进程模型向线程模型移植代码的装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程。
在本申请所提供的几个实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种进程模型向线程模型移植代码的方法,其特征在于,所述方法包括:在进程模型的程序代码中,设置全局变量对应的宏定义信息;
获取线程模型中线程对应的全局变量信息,所述全局变量信息包括线程对应的全局变量的名称、长度和变量值;
为所述线程对应的全局变量信息分配内存地址,将所述全局变量信息存储在所述内存地址对应的内存空间中;
获取所述线程的线程标识,并在所述线程模型的线程时域链表中,存储所述线程标识、所述线程对应的全局变量的名称与所述内存地址的对应关系。
2.根据权利要求1所述的方法,其特征在于,所述获取线程模型中线程对应的全局变量信息,包括:
在线程模型中线程启动的代码处设置全局变量注册接口;通过所述全局变量注册接口获取所述线程对应的全局变量信息。
3.根据权利要求1所述的方法,其特征在于,建立所述线程对应的时域记录之后,还包括:
在预编译阶段,根据所述宏定义信息对程序代码中的全局变量宏展开为地址获取函数;
调用所述地址获取函数,根据所述线程的线程标识及所述线程对应的全局变量的名称,从所述线程时域链表中获取所述线程对应的内存地址;
根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息。
4.根据权利要求3所述的方法,其特征在于,所述根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息,包括:
对所述内存地址进行解复用处理,得到解复用后的地址信息;根据所述解复用后的地址信息,获取所述内存地址对应的内存空间中存储的全局变量信息。
5.一种进程模型向线程模型移植代码的装置,其特征在于,所述装置包括:设置模块,用于在进程模型的程序代码中,设置全局变量对应的宏定义信息;
获取模块,用于获取线程模型中线程对应的全局变量信息,所述全局变量信息包括线程对应的全局变量的名称、长度和变量值;
分配存储模块,用于为所述线程对应的全局变量信息分配内存地址,将所述全局变量信息存储在所述内存地址对应的内存空间中;
建立模块,包括:第二获取单元,用于获取所述线程的线程标识;存储单元,用于在所述线程模型的线程时域链表中,存储所述线程标识、所述线程对应的全局变量的名称与所述内存地址的对应关系。
6.根据权利要求5所述的装置,其特征在于,所述获取模块包括:
设置单元,用于在线程模型中线程启动的代码处设置全局变量注册接口;第一获取单元,用于通过所述全局变量注册接口获取所述线程对应的全局变量信息。
7.根据权利要求5所述的装置,其特征在于,所述装置还包括:
宏展开模块,用于在预编译阶段,根据所述宏定义信息对程序代码中的全局变量宏展开为地址获取函数;
调用获取模块,用于调用所述地址获取函数,根据所述线程的线程标识及所述线程对应的全局变量的名称,从所述线程时域链表中获取所述线程对应的内存地址;
引用模块,用于根据所述内存地址,引用所述内存地址对应的内存空间中存储的全局变量信息。
8.根据权利要求7所述的装置,其特征在于,所述引用模块包括:
解复用单元,用于对所述内存地址进行解复用处理,得到解复用后的地址信息;第三获取单元,用于根据所述解复用后的地址信息,获取所述内存地址对应的内存空间中存储的全局变量信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610170127.7A CN105786525B (zh) | 2016-03-23 | 2016-03-23 | 一种进程模型向线程模型移植代码的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610170127.7A CN105786525B (zh) | 2016-03-23 | 2016-03-23 | 一种进程模型向线程模型移植代码的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105786525A CN105786525A (zh) | 2016-07-20 |
CN105786525B true CN105786525B (zh) | 2019-01-25 |
Family
ID=56390697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610170127.7A Active CN105786525B (zh) | 2016-03-23 | 2016-03-23 | 一种进程模型向线程模型移植代码的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786525B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371826B (zh) * | 2016-08-23 | 2019-11-29 | 百富计算机技术(深圳)有限公司 | 应用程序跨系统运行的方法和装置 |
CN106445656B (zh) * | 2016-09-06 | 2019-10-11 | 北京邮电大学 | 一种实现线程本地存储的方法及装置 |
CN110737465B (zh) * | 2018-07-20 | 2023-09-22 | 深圳市大梦龙途网络科技有限公司 | 一种函数调用路径获取的方法和相关装置 |
CN110390196B (zh) * | 2019-07-15 | 2024-10-18 | 腾讯科技(深圳)有限公司 | 一种安全防护方法、装置、设备及介质 |
CN117111950B (zh) * | 2023-08-23 | 2024-03-29 | 北京云枢创新软件技术有限公司 | 基于常量宏定义的宏文本展开方法、电子设备和介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117481B1 (en) * | 2002-11-06 | 2006-10-03 | Vmware, Inc. | Composite lock for computer systems with multiple domains |
CN1851671A (zh) * | 2005-07-01 | 2006-10-25 | 华为技术有限公司 | 一种节省全局变量内存空间的方法 |
CN101634953A (zh) * | 2008-07-22 | 2010-01-27 | 国际商业机器公司 | 搜索空间计算方法和装置及自适应线程调度方法和系统 |
CN102841782A (zh) * | 2011-06-23 | 2012-12-26 | 腾讯科技(深圳)有限公司 | 全局变量管理方法及装置 |
US8527976B2 (en) * | 2007-11-14 | 2013-09-03 | Nec Laboratories America, Inc. | System and method for generating error traces for concurrency bugs |
CN105138397A (zh) * | 2012-08-30 | 2015-12-09 | 想象力科技有限公司 | 多线程处理器中的全局寄存器保护 |
CN105183652A (zh) * | 2015-09-14 | 2015-12-23 | 桂林电子科技大学 | 时间动态下推网络的转换方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7478047B2 (en) * | 2000-11-03 | 2009-01-13 | Zoesis, Inc. | Interactive character system |
US20080270363A1 (en) * | 2007-01-26 | 2008-10-30 | Herbert Dennis Hunt | Cluster processing of a core information matrix |
-
2016
- 2016-03-23 CN CN201610170127.7A patent/CN105786525B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117481B1 (en) * | 2002-11-06 | 2006-10-03 | Vmware, Inc. | Composite lock for computer systems with multiple domains |
CN1851671A (zh) * | 2005-07-01 | 2006-10-25 | 华为技术有限公司 | 一种节省全局变量内存空间的方法 |
US8527976B2 (en) * | 2007-11-14 | 2013-09-03 | Nec Laboratories America, Inc. | System and method for generating error traces for concurrency bugs |
CN101634953A (zh) * | 2008-07-22 | 2010-01-27 | 国际商业机器公司 | 搜索空间计算方法和装置及自适应线程调度方法和系统 |
CN102841782A (zh) * | 2011-06-23 | 2012-12-26 | 腾讯科技(深圳)有限公司 | 全局变量管理方法及装置 |
CN105138397A (zh) * | 2012-08-30 | 2015-12-09 | 想象力科技有限公司 | 多线程处理器中的全局寄存器保护 |
CN105183652A (zh) * | 2015-09-14 | 2015-12-23 | 桂林电子科技大学 | 时间动态下推网络的转换方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105786525A (zh) | 2016-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105786525B (zh) | 一种进程模型向线程模型移植代码的方法及装置 | |
CN109697153A (zh) | 监控方法、监控系统及计算机可读存储介质 | |
CN109814884A (zh) | 一种根据游戏资源类型进行资源管理的方法及系统 | |
CN109495584B (zh) | 物联网设备接入方法、装置、设备及介质 | |
CN113067900B (zh) | 智能合约的部署方法及装置 | |
CN106250310B (zh) | 一种测试用例生成方法及装置 | |
CN106326363B (zh) | 一种基于正则表达式的匹配方法及装置 | |
CN112560114B (zh) | 调用智能合约的方法及装置 | |
CN109933315A (zh) | 一种图形化的业务处理系统和方法 | |
CN104461621B (zh) | 一种更新属性信息的方法及装置 | |
CN109582517A (zh) | 系统应用自动化测试方法、装置、系统及工具存储端 | |
CN105808165B (zh) | 在云计算管理平台中虚拟机访问存储设备的方法和装置 | |
CN107205015A (zh) | 开放接口的实现方法和装置 | |
CN103559032A (zh) | 嵌入式系统对象管理的装置及方法 | |
CN109936642A (zh) | 一种分布式系统中生成机器id的方法、装置及系统 | |
CN107977223A (zh) | 一种配置兼容性检查方法及装置 | |
CN111381820A (zh) | 一种基于gui自动生成api的方法及装置 | |
CN109683910A (zh) | 大数据平台部署方法及装置 | |
CN109947435A (zh) | 服务器集群软件环境的部署方法及系统 | |
CN109165332A (zh) | 一种网页信息获取方法、装置以及设备 | |
CN115311399A (zh) | 图像渲染方法、装置、电子设备以及存储介质 | |
CN106294530A (zh) | 规则匹配的方法和系统 | |
CN110298031A (zh) | 一种词典服务系统及模型版本一致性配送方法 | |
CN109739473A (zh) | 业务接口的开发方法 | |
CN107783822A (zh) | 一种资源管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |