System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及通信,尤其涉及一种有名信号量的创建方法、装置、设备、介质和产品。
技术介绍
1、在多任务操作系统中,有名信号量是一种常用于多进程编程的同步机制。现有的有名信号量创建方法通常依赖于文件系统的操作,如文件的创建、写入、链接等。一种典型的实现方法包括以下步骤:根据输入的信号量名称加工得到有名信号量文件名。判断系统是否已经存在该有名信号量文件,如果有则直接打开并映射到进程内存空间。如果没有则执行创建初始化流程,在内存中初始化信号量的值,然后创建一个临时文件,并将初始化的信号量值写入该文件。使用link文件操作来原子地将临时文件链接为最终的信号量文件。将文件映射到进程内存中,并按信号量数据结构来访问映射的内存。这样便完成了有名信号量的创建与初始化,多个进程通过同样的信号量名字来访问同一个信号量文件在各自进程中的内存映射,从而实现跨进程访问同一个有名信号量。
2、然而,专利技术人发现现有技术至少存在如下问题:现有的方法通过文件链接link操作来将保存有初始化过的信号量的临时文件原子的链接为信号量文件,从而保证了创建过程的多进程与多线程正确性,这种方法依赖于文件链接,存在兼容性问题,在不支持文件链接的操作系统上,该方案便无法兼容。
技术实现思路
1、本专利技术实施例的目的是提供一种有名信号量的创建方法、装置、设备、介质和产品,其能够不依赖于文件链接实现对有名信号量的创建和初始化,具有更好的兼容性与性能。
2、为实现上述目的,本专利技术实施例提供了一种有名信号
3、获取有名信号量文件;
4、设置所述有名信号量文件的大小为预设的数据结构的大小;所述数据结构包括信号量对象和原子变量,所述原子变量用于同步多个进程同时进行的创建与初始化行为;
5、将所述有名信号量文件映射到进程的内存空间,以使不同进程通过映射后的内存地址按所述数据结构访问和使用有名信号量;
6、调用预设的接口来检查与初始化所述数据结构。
7、作为上述方案的改进,所述获取有名信号量文件,包括:
8、根据信号量名称,生成有名信号量文件名;
9、检查所述有名信号量文件名对应的有名信号量文件是否存在;
10、当所述有名信号量文件不存在时,创建有名信号量文件;
11、当所述有名信号量文件存在时,打开所述有名信号量文件。
12、作为上述方案的改进,所述信号量对象包括计数器、作用范围属性和等待者计数;其中,所述计数器用于表示可用资源数量,所述作用范围属性用于表示信号量是否是本进程独享,所述等待者计数用于表示当前阻塞等待信号量的线程数量。
13、作为上述方案的改进,所述原子变量包括如下状态:未初始化、正在初始化和初始化完成。
14、作为上述方案的改进,所述调用预设的接口来检查与初始化所述数据结构,包括:
15、调用原子比较修改接口,比较所述原子变量是否为未初始化状态;
16、当所述原子变量为未初始化状态时,将所述原子变量修改为正在初始化状态;
17、设置所述信号量对象的计数器值为用户输入的信号量初始值;
18、调用原子写操作将所述原子变量修改为初始化完成状态,并返回成功状态码。
19、所述调用预设的接口来检查与初始化所述数据结构,还包括:
20、当所述原子变量不为未初始化状态,或者将所述原子变量修改为正在初始化状态失败时,调用原子读接口,判断所述原子变量是否为正在初始化状态;
21、当所述原子变量为正在初始化状态时,判断在预设的循环次数阈值内所述原子变量是否变为初始化完成状态;
22、若是,返回成功状态码;若否,返回失败状态码。
23、作为上述方案的改进,所述方法还包括:
24、将所述信号量对象的地址和所述有名信号量文件的文件信息进行绑定保存。
25、作为上述方案的改进,所述将所述信号量对象的地址和所述有名信号量文件的文件信息进行绑定保存,包括:
26、获取所述有名信号量文件在文件系统中的索引节点号;
27、将所述索引节点号与所述信号量对象的地址成对保存起来。
28、本专利技术实施例还提供了一种有名信号量的创建装置,包括:
29、文件获取模块,用于获取有名信号量文件;
30、文件大小设置模块,用于设置所述有名信号量文件的大小为预设的数据结构的大小;所述数据结构包括信号量对象和原子变量,所述原子变量用于同步多个进程同时进行的创建与初始化行为;
31、文件映射模块,用于将所述有名信号量文件映射到进程的内存空间,以使不同进程通过映射后的内存地址按所述数据结构访问和使用有名信号量;
32、初始化模块,用于调用预设的接口来检查与初始化所述数据结构。
33、本专利技术实施例还提供了一种有名信号量的创建设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任意一项所述的有名信号量的创建方法。
34、本专利技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上述任意一项所述的有名信号量的创建方法。
35、本专利技术实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序或计算机指令,所述计算机程序或所述计算机指令被处理器执行时实现如上述任意一项所述的有名信号量的创建方法。
36、与现有技术相比,本专利技术公开的有名信号量的创建方法、装置、设备、介质和产品,通过创建有名信号量文件,设置所述有名信号量文件的大小为预设的数据结构的大小;所述数据结构包括信号量对象和原子变量,所述原子变量用于同步多个进程同时进行的创建与初始化行为;将所述有名信号量文件映射到进程的内存空间,以使不同进程通过映射后的内存地址按所述数据结构访问和使用有名信号量;调用预设的接口来检查与初始化所述数据结构。本专利技术定义了一个包含信号量和原子变量的数据结构体,通过直接操作映射内存进行初始化,并通过原子变量实现对信号量初始化过程的并发控制与同步,在不依赖于文件系统的文件链接相关操作的情况下,实现对有名信号量的创建和初始化,具有更好的兼容性与性能。
本文档来自技高网...【技术保护点】
1.一种有名信号量的创建方法,其特征在于,包括:
2.如权利要求1所述的有名信号量的创建方法,其特征在于,所述获取有名信号量文件,包括:
3.如权利要求1所述的有名信号量的创建方法,其特征在于,所述原子变量包括如下状态:未初始化、正在初始化和初始化完成。
4.如权利要求3所述的有名信号量的创建方法,其特征在于,所述调用预设的接口来检查与初始化所述数据结构,包括:
5.如权利要求4所述的有名信号量的创建方法,其特征在于,所述调用预设的接口来检查与初始化所述数据结构,还包括:
6.如权利要求1至5任一项所述的有名信号量的创建方法,其特征在于,所述方法还包括:
7.一种有名信号量的创建装置,其特征在于,包括:
8.一种有名信号量的创建设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6中任意一项所述的有名信号量的创建方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序或计算机指令,所述计算机程序或所述计算机指令被处理器执行时实现如权利要求1至6中任意一项所述的有名信号量的创建方法。
...【技术特征摘要】
1.一种有名信号量的创建方法,其特征在于,包括:
2.如权利要求1所述的有名信号量的创建方法,其特征在于,所述获取有名信号量文件,包括:
3.如权利要求1所述的有名信号量的创建方法,其特征在于,所述原子变量包括如下状态:未初始化、正在初始化和初始化完成。
4.如权利要求3所述的有名信号量的创建方法,其特征在于,所述调用预设的接口来检查与初始化所述数据结构,包括:
5.如权利要求4所述的有名信号量的创建方法,其特征在于,所述调用预设的接口来检查与初始化所述数据结构,还包括:
6.如权利要求1至5任一项所述的有名信号量的创建方法,其特征在于,所述方法还包括:
7.一种有名信号量的创建装置...
【专利技术属性】
技术研发人员:杨实巧,贺鸿飞,侯运彬,
申请(专利权)人:中移物联网有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。