CN115016948B - 一种资源访问方法、装置、电子设备及可读存储介质 - Google Patents
一种资源访问方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN115016948B CN115016948B CN202210944519.XA CN202210944519A CN115016948B CN 115016948 B CN115016948 B CN 115016948B CN 202210944519 A CN202210944519 A CN 202210944519A CN 115016948 B CN115016948 B CN 115016948B
- Authority
- CN
- China
- Prior art keywords
- threads
- thread
- library
- strategy
- policy
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种资源访问方法、装置、电子设备及可读存储介质,所述方法包括:响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。本申请中,通过在C/C++库增加线程同步策略和/或在AOS内核增加重入结构策略的方式,来控制多个线程执行访问机制,避免访问过程中出现多线程并发问题。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种资源访问方法、装置、电子设备及可读存储介质。
背景技术
物联网设备的产品开发过程中的,一般直接使用对应架构例如ARM提供的原生工具链,C/C++库包含在该工具链之中,但是C/C++库本身对于多线程支持是有问题的。
这就使得在基于C/C++库进行资源访问的过程中,会产生各种各样多线程并发问题。
发明内容
本申请解决的问题是现有C/C++库进行资源访问的过程中,容易出现多线程并发问题。
为解决上述问题,本申请第一方面提供了一种资源访问方法,包括:
响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
本申请第二方面提供了一种资源访问装置,其包括:
表征获取模块,其用于响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
访问控制模块,其用于基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
本申请第三方面提供了一种电子设备,其包括:存储器和处理器;
所述存储器,其用于存储程序;
所述处理器,耦合至所述存储器,用于执行所述程序,以用于:
响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
本申请第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行实现上述所述的资源访问方法。
本申请中,通过在C/C++库增加线程同步策略和/或在AOS内核增加重入结构策略的方式,来控制多个线程执行访问机制,避免访问过程中出现多线程并发问题。
附图说明
图1为根据本申请一个实施例的资源访问方法的流程图;
图2为本申请ARM/RISC-V架构的示意图;
图3为根据本申请一个实施例的资源访问方法S200的流程图;
图4为本申请AOS内核中的重入结构策略的示意图;
图5为本申请通过内存优化前后的对照表;
图6为根据本申请一个实施例的资源访问装置的结构框图;
图7为根据本申请实施例的电子设备的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更为明显易懂,下面结合附图对本申请的具体实施例做详细的说明。虽然附图中显示了本申请的示例性实施方式,然而应当理解,可以以各种形式实现本申请而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本申请,并且能够将本申请的范围完整的传达给本领域的技术人员。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。
在一些较复杂应用场景的物联网智能设备,如有几十个任务并发的WIFI音箱产品,容易触发在C/C++库的并发问题。如多个任务写入同一个文件,多任务间错误码混乱,本地时间获取混乱等。
这是因为底层C/C++库的多线程并发问题。C/C++库是包含在工具链之中的,简单物联网开发一般直接使用ARM提供的原生工具链,其本身对于多线程支持是有问题的,会有各种各样多线程并发问题。
在设计之初,是通过C/C++库直接操作CPU,因此C/C++库是单线程的,与单核的CPU对应。现有的物联网架构中,在C/C++库与CPU之间增加了多核多线程的物联网操作系统,该操作系统与C/C++库对接;这就导致了C/C++库在进行多线程处理时,经常因为底层逻辑导致多线程并发问题。
针对上述问题,本申请提供一种新的资源访问方案,通过在C/C++库或者AOS内核增加避免并发的策略来控制多线程执行正常的资源访问。
为了便于理解,在此对下述可能使用的术语进行解释:
物联网操作系统:适用于物联网(Internet Of Things)领域的操作系统。
C库:实现C语言标准和POSIX标准的基础库。有多种实现,如Gnu Libc,Musl Libc,Newlib Libc等,其中Newlib Libc是物联网领域比较常用的一种C库。
AliOS Things(AOS):面向IoT领域的、高可伸缩的物联网操作系统。
工具链:包含编译器,汇编器,链接器,调试器,反汇编等一些列的开发工具集合。
本申请实施例提供了一种资源访问方法,该方法可以由资源访问装置来执行,该资源访问装置可以集成在Pad、电脑、服务器、计算机、服务器集群、数据中心等电子设备中。如图1所示,其为根据本申请一个实施例的资源访问方法的流程图;其中,所述资源访问方法,包括:
S100,响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
本申请中,线程对资源的访问请求,可以是线程执行时需要访问对应的资源,也可以是封装线程的更大规模的任务中设置有线程访问资源的对应逻辑,也可以是其他表征方式,本申请中,对访问请求的具体表征方式不做限制。
本申请中,线程的表征信息,即是决定通过何种策略来执行该线程的信息,其具体表现形式与对应策略的设置逻辑有关。例如,如果设置通过第一策略来执行所有访问第一资源的线程,则线程中记载的要访问的第一资源或者第一资源的标识,即是线程的表征信息;例如,如果设置由第一策略来执行所有的线程,则线程本身即是表征信息。本申请中,对于线程的具体表征信息的表现形式,不做限制。特殊情况下,线程上未设置表征信息,但是封装逻辑上决定使用第一策略来执行该线程,则也可以认为是线程上设置了第一策略的表征信息。
S200,基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
本申请中,C/C++库的线程同步策略,是通过在C/C++库进行对应调整后实现的,AOS内核的重入结构策略,是通过对AOS内核进行调整实现的。在此需要说明的是,对于一个完整的C/C++库关联有很多的其余架构,例如C/C++库关联的工具链,因此在对C/C++库进行调整时,根据实际需要还可能需要将关联的工具链也进行适应性调整,才可以实现/执行C/C++库对应的策略,相似地,AOS的调整也具有类似关联性。本申请中,对需要适应性调整的其余内容不再赘述。
本申请中,通过在C/C++库增加线程同步策略和/或在AOS内核增加重入结构策略的方式,来控制多个线程执行访问机制,避免访问过程中出现多线程并发问题。
在一种实施方式中,多个所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,获取所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的多个所述线程按照同步机制执行。
在一种实施方式中,多个所述线程均具有关联AOS内核的重入结构策略的表征信息的情况下,在多个所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制多个所述线程按照避免并发的访问机制执行。
在一种实施方式中,多个所述线程中第一部分的所述线程均具有关联AOS内核的重入结构策略的表征信息,除第一部分外的其余所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,在第一部分的所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制第一部分的所述线程按照避免并发的访问机制执行;
获取除第一部分外的其余所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的该所述线程按照同步机制执行。
本申请中,访问的所述资源,可以是内存资源、数据资源,也可以是C/C++库中的API资源/函数资源。资源的具体形式,可以根据实际情况确定,本申请中对此不做限制。
本申请中,所述线程访问资源的目的是打开文件、读文件、写文件的情况下,通过C/C++库的线程同步策略对所述线程执行同步机制。
需要说明的是,本申请中,所述同步机制,并非是指多线程同步,其实质上表征多个线程可以避免并发的情况下完成访问,具体可以包括多线程同步、多线程互斥等等情形。
这样,在需要访问资源的多个线程均需要通过C/C++库的所述线程同步策略控制时,设置线程同步策略执行同步机制;在需要访问资源的多个线程均需要通过AOS内核的重入结构策略控制时,设置重入结构策略执行避免并发的访问机制;在一部分需要通过C/C++库的所述线程同步策略,另一部分需要通过AOS内核的重入结构策略控制时,同时设置线程同步策略和重入结构策略执行对应的线程,从而避免了多线程并发的问题,且通过将线程同步策略和重入结构策略结合,极大地扩大了可以解决的多线程并发的情形。
如图2所示,其为本申请ARM/RISC-V架构的示意图,图中Pthread即POSIXThreads,POSIX表示可移植操作系统接口,所以Pthread就是在这个标准下实现的线程;Binutils是一些二进制工具的集合,GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器;GDB为UNIX平台下的调试工具;LIBC_STUB组件是对C/C++库桩函数(Stubs)的实现,用于AOS与C/C++库的对接;Newlib是面向嵌入式系统的C运行库。
图中,Binutils、GCC、GDB为进行应用程序的开发过程中使用的常用工具,其在应用开发过程中的具体使用过程在此不再赘述。ARM、RISC-V为常用的两种架构,为基础硬件,AOS3.3为运行在ARM或RISC-V架构上的操作系统,Newlib为C库的一种,在此作为应用程序的开发和执行基础。开发完成的应用程序在执行时,其具体功能是通过调用C库实现的,其中,C库被调用执行具体功能的实现时,由AOS系统控制对应的硬件达成该具体功能;LIBC_STUB组件是C库完成对AOS3.3系统的驱动或其他功能的调用通道,POSIX为接口标准,通过该接口标准增加C库支持的标准语义,例如POSIX可以用于对C库中的优先级参数和AOS优先级的参数的进行转换。
由图中可以看出,在C/C++库中添加线程同步策略,从而完成对多线程的同步机制。
在一种实施方式中,所述线程同步策略为互斥锁策略或者信号量策略,如图3所示,所述通过C/C++库的所述线程同步策略控制访问相同资源的所述线程按照同步机制执行,包括:
S201,为所述资源创建互斥量或者信号量;
本申请中,所述互斥量(Mutex)为表现互斥现象的数据结构,能用作同步多任务的行为,能用作保护从中断来的临界段代码并且在共享同步使用的资源。所述互斥量提供对资源的独占访问,Mutex对象的值,仅有0和1两个值:值为0,表示锁定状态,当前对象被锁定,用户线程如果试图Lock临界资源,则进入排队等待;值为1,表示空闲状态,当前对象为空闲,用户进程/线程可以Lock临界资源,之后Mutex值减1变为0。
本申请中,信号量(Semaphore)为在多线程环境下使用的一种设施,它负责协调各个线程,以保证它们能够正确、合理的使用公共资源;信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。
S202,基于所述互斥量,通过C/C++库的所述互斥锁策略控制访问相同资源的所述线程执行线程互斥;
本申请中,互斥锁策略的具体实现方式在此不再赘述。
或者,S203,基于所述信号量,通过C/C++库的所述信号量策略控制访问相同资源的所述线程执行线程同步。
本申请中,信号量策略的具体实现方式在此不再赘述。
本申请中,通过设置互斥锁策略或者信号量策略,控制了访问相同资源的所述线程执行同步机制,避免了多线程并发问题。
本申请中,还可以采用其他方式来控制访问相同资源的所述线程执行同步机制,如基于自旋锁的策略,基于临界区的策略,基于事件对象的策略等。
在一种实施方式中,所述线程上记录有需要访问的资源的标识,基于该标识确定访问相同资源的多个所述线程。
本申请中,该标识可以为一个指向资源存储位置的指针,也可以为标识该资源的一个全局变量,也可以为其他表现形式。
在一种实施方式中,通过AOS内核的重入结构策略控制所述线程按照避免并发的访问机制执行,包括:
所述线程的控制块中定义有可重入结构指针,基于该控制块为每个线程单独分配一个C/C++库并发需要的可重入结构,基于所述可重入结构控制所述线程按照访问机制执行。
这样,在控制块中为每个任务定义C/C++库的可重入结构指针_reent,为每个任务单独分配一个C/C++库并发需要的可重入结构,
如图4所示,图中的Control Block为任务的所述控制块,该控制块内定义有可重入结构指针Struct_reent;每个可重入结构指针可以通过延迟分配的方式分配可重入结构。
需要说明的是,本申请中,C/C++库获取可重入结构的指针为多个,从而可以在多核架构中多个任务真正并发运行且避免并发问题。
在一种实施方式中,为线程单独分配所述可重入结构之前,对所述可重入结构进行裁剪。
本申请中,其具体裁剪方式可以为:根据C/C++库的配置,配置一个宏_REENT_SMALL来完成裁剪。
通过裁剪,使得可重入结构尽可能满足需求并且足够小,从而可以减少可重入结构占据的内存。
在一种实施方式中,所述线程的控制块中的所述可重入结构指针为空,检测到对该可重入结构指针的调用函数后,分配所述可重入结构,并将所述可重入结构指针指向分配的该可重入结构。
本申请中,通过上述方式来延迟分配可重入结构的内存,从而进行内存资源的优化。
具体地,结合图4对AOS内核的重入结构策略的执行过程进行说明:AOS内核创建任务时,同时创建该任务的任务控制块;例如创建任务TaskA、TaskB时,同时创建任务TaskA、TaskB的任务控制块TaskA control block、TaskA control block;其中,任务控制块内记录了任务控制块的特性,本申请中对任务控制块的具体特征不作限制。创建的任务控制块(TaskA control block、TaskA control block)内包含可重入结构的指针struct_reent*,该指针为空;C/C++库中的任务运行,执行调用函数(_getreent)时,AOS内核基于该调用,检测任务控制块(TaskA control block、TaskA control block)内的指针(struct_reent*)是否为空,若为空,则分配对应的可重入结构(图4中的libc struct_reent),可重入结构中记录有对应特性,本申请对其记录的特性不作限制。
其中,TaskA、TaskB的任务控制块、可重入结构相互独立,基于此,多个任务具体执行时不会产生并发问题;任务控制块内的指针只有在C/C++库进行第一次调用时才会分配具体的可重入结构的分配,基于此,可以显著优化内存开销。
需要说明的是,ISR(Interrupt Service Routines,中断服务程序)在创建时也分配有可重入结构,与其他任务的具体过程不同之处在于,ISR分配的可重入结构为全局的可重入结构,且不进行延迟分配。
如图5所示,其为通过本方式的内存优化前后的对照表,根据该对照表可以明显看出,通过延迟分配内存的方式,可以对内存开销带来极其显著的优化效果。
在一种实施方式中,在中断上下文(ISR)中统一使用同一个全局的可重入结构_reent,这样,不需要为每个中断处理过程分配一个可重入结构_reent,比较处理中断的实时性更好。
本申请中,通过定制ARM工具链,与物联网操作系统如AliOS Things内核的线程管理相结合,解决C/C++库的并发问题;采用延迟内存分配的技术方案,降低解决问题同时带来的内存资源开销。
本申请中,使ARM/RISC-V的原生工具链,与物联网操作系统AOS相结合。在定制工具链时,对接C/C++库与AOS(AOS3.3)的POSIX组件提供的Pthread线程间同步API,解决C/C++库内的共享资源被多个线程同时访问引发的并发问题。
本申请中,可以根据AliOS Things的特性,重新配置LIBC、Binutils、GCC及其中的C++库,C++库也与Pthread对接,支持C++11及更高标准C++17/C++20的多线程特性。
本申请中,在物联网操作系统领域,对接工具链中C/C++库与操作系统内核的线程管理,使其结合;同时实现C/C++库内可重入结构,在操作系统内核中每个线程有单独的实例,所有的中断共享一个实例;这样才能彻底地接C/C++库的并发问题。
本申请实施例提供了一种资源访问装置,用于执行本申请上述内容所述的资源访问方法,以下对所述资源访问装置进行详细描述。
如图6所示,所述资源访问装置,包括:
表征获取模块101,其用于响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
访问控制模块102,其用于基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
在一种实施方式中,所述访问控制模块102还用于:
多个所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,获取所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的多个所述线程按照同步机制执行。
在一种实施方式中,所述访问控制模块102还用于:
多个所述线程均具有关联AOS内核的重入结构策略的表征信息的情况下,在多个所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制多个所述线程按照避免并发的访问机制执行。
在一种实施方式中,所述访问控制模块102还用于:
多个所述线程中第一部分的所述线程均具有关联AOS内核的重入结构策略的表征信息,除第一部分外的其余所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,在第一部分的所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制第一部分的所述线程按照避免并发的访问机制执行;获取除第一部分外的其余所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的该所述线程按照同步机制执行。
在一种实施方式中,所述线程同步策略为互斥锁策略或者信号量策略,所述访问控制模块102还用于:
为所述资源创建互斥量或者信号量;基于所述互斥量,通过C/C++库的所述互斥锁策略控制访问相同资源的所述线程执行线程互斥;或者,基于所述信号量,通过C/C++库的所述信号量策略控制访问相同资源的所述线程执行线程同步。
在一种实施方式中,所述线程上记录有需要访问的资源的标识,基于该标识确定访问相同资源的多个所述线程。
在一种实施方式中,所述访问控制模块102还用于:
所述线程的控制块中定义有可重入结构指针,基于该控制块为每个线程单独分配一个C/C++库并发需要的可重入结构,基于所述可重入结构控制所述线程按照访问机制执行。
在一种实施方式中,所述访问控制模块102还用于:
为线程单独分配所述可重入结构之前,对所述可重入结构进行裁剪。
在一种实施方式中,所述访问控制模块102还用于:
所述线程的控制块中的所述可重入结构指针为空,检测到对该可重入结构指针的调用函数后,分配所述可重入结构,并将所述可重入结构指针指向分配的该可重入结构。
本申请的上述实施例提供的资源访问装置与本申请实施例提供的资源访问方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
以上描述了资源访问装置的内部功能和结构,如图7所示,实际中,该资源访问装置可实现为电子设备,包括:存储器301及处理器303。
存储器301,可被配置为存储程序。
另外,存储器301,还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器301可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器303,耦合至存储器301,用于执行存储器301中的程序,以用于:
响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
在一种实施方式中,处理器303具体用于:
多个所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,获取所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的多个所述线程按照同步机制执行。
在一种实施方式中,处理器303具体用于:
多个所述线程均具有关联AOS内核的重入结构策略的表征信息的情况下,在多个所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制多个所述线程按照避免并发的访问机制执行。
在一种实施方式中,处理器303具体用于:
多个所述线程中第一部分的所述线程均具有关联AOS内核的重入结构策略的表征信息,除第一部分外的其余所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,在第一部分的所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制第一部分的所述线程按照避免并发的访问机制执行;获取除第一部分外的其余所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的该所述线程按照同步机制执行。
在一种实施方式中,所述线程同步策略为互斥锁策略或者信号量策略,处理器303具体用于:
为所述资源创建互斥量或者信号量;基于所述互斥量,通过C/C++库的所述互斥锁策略控制访问相同资源的所述线程执行线程互斥;或者,基于所述信号量,通过C/C++库的所述信号量策略控制访问相同资源的所述线程执行线程同步。
在一种实施方式中,所述线程上记录有需要访问的资源的标识,基于该标识确定访问相同资源的多个所述线程。
在一种实施方式中,处理器303具体用于:
所述线程的控制块中定义有可重入结构指针,基于该控制块为每个线程单独分配一个C/C++库并发需要的可重入结构,基于所述可重入结构控制所述线程按照访问机制执行。
在一种实施方式中,处理器303具体用于:
为线程单独分配所述可重入结构之前,对所述可重入结构进行裁剪。
在一种实施方式中,处理器303具体用于:
所述线程的控制块中的所述可重入结构指针为空,检测到对该可重入结构指针的调用函数后,分配所述可重入结构,并将所述可重入结构指针指向分配的该可重入结构。
本申请中,图7中仅示意性给出部分组件,并不意味着电子设备只包括图7所示组件。
本实施例提供的电子设备,与本申请实施例提供的资源访问方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(FLASH RAM)。内存是计算机可读介质的示例。
本申请还提供一种与前述实施方式所提供的资源访问方法对应的计算机可读存储介质,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的资源访问方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(Transitory Media),如调制的数据信号和载波。
本申请的上述实施例提供的计算机可读存储介质与本申请实施例提供的资源访问方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
需要说明的是,在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的结构和技术,以便不模糊对本说明书的理解。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (12)
1.一种资源访问方法,其特征在于,包括:
响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
2.根据权利要求1所述的方法,其特征在于,多个所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,获取所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的多个所述线程按照同步机制执行。
3.根据权利要求1所述的方法,其特征在于,多个所述线程均具有关联AOS内核的重入结构策略的表征信息的情况下,在多个所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制多个所述线程按照避免并发的访问机制执行。
4.根据权利要求1所述的方法,其特征在于,多个所述线程中第一部分的所述线程均具有关联AOS内核的重入结构策略的表征信息,除第一部分外的其余所述线程均具有关联C/C++库的所述线程同步策略的表征信息的情况下,在第一部分的所述线程上添加定义可重入结构的控制块,通过AOS内核的重入结构策略控制第一部分的所述线程按照避免并发的访问机制执行;
获取除第一部分外的其余所述线程与访问的所述资源的关联关系,通过C/C++库的所述线程同步策略控制访问相同资源的该所述线程按照同步机制执行。
5.根据权利要求2或4所述的方法,其特征在于,所述线程同步策略为互斥锁策略或者信号量策略,所述通过C/C++库的所述线程同步策略控制访问相同资源的所述线程按照同步机制执行,包括:
为所述资源创建互斥量或者信号量;
基于所述互斥量,通过C/C++库的所述互斥锁策略控制访问相同资源的所述线程执行线程互斥;
或者,基于所述信号量,通过C/C++库的所述信号量策略控制访问相同资源的所述线程执行线程同步。
6.根据权利要求1所述的方法,其特征在于,所述线程上记录有需要访问的资源的标识,基于该标识确定访问相同资源的多个所述线程。
7.根据权利要求3或4所述的方法,其特征在于,通过AOS内核的重入结构策略控制所述线程按照避免并发的访问机制执行,包括:
所述线程的控制块中定义有可重入结构指针,基于该控制块为每个线程单独分配一个C/C++库并发需要的可重入结构,基于所述可重入结构控制所述线程按照访问机制执行。
8.根据权利要求7所述的方法,其特征在于,为线程单独分配所述可重入结构之前,对所述可重入结构进行裁剪。
9.根据权利要求7所述的方法,其特征在于,所述线程的控制块中的所述可重入结构指针为空,检测到对该可重入结构指针的调用函数后,分配所述可重入结构,并将所述可重入结构指针指向分配的该可重入结构。
10.一种资源访问装置,其特征在于,包括:
表征获取模块,其用于响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
访问控制模块,其用于基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
11.一种电子设备,其特征在于,包括:存储器和处理器;
所述存储器,其用于存储程序;
所述处理器,耦合至所述存储器,用于执行所述程序,以用于:
响应于多个线程对资源的访问请求,获取所述线程的表征信息,该表征信息用于关联C/C++库的线程同步策略或AOS内核的重入结构策略;
基于所述表征信息,通过所述线程同步策略和/或所述重入结构策略控制访问相同资源的多个所述线程按照避免并发的访问机制执行。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行实现权利要求1-9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210944519.XA CN115016948B (zh) | 2022-08-08 | 2022-08-08 | 一种资源访问方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210944519.XA CN115016948B (zh) | 2022-08-08 | 2022-08-08 | 一种资源访问方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115016948A CN115016948A (zh) | 2022-09-06 |
CN115016948B true CN115016948B (zh) | 2022-11-25 |
Family
ID=83065600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210944519.XA Active CN115016948B (zh) | 2022-08-08 | 2022-08-08 | 一种资源访问方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115016948B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525780A (en) * | 1981-05-22 | 1985-06-25 | Data General Corporation | Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
CN108647087A (zh) * | 2018-05-17 | 2018-10-12 | 腾讯科技(深圳)有限公司 | 实现php内核可重入的方法、装置、服务器和存储介质 |
CN109165516A (zh) * | 2018-08-14 | 2019-01-08 | 中国银联股份有限公司 | 一种访问控制方法和装置 |
CN111582562A (zh) * | 2020-04-20 | 2020-08-25 | 杭州意能电力技术有限公司 | 一种基于优化控制平台的神经网络预测控制方法 |
WO2021155529A1 (zh) * | 2020-02-06 | 2021-08-12 | Oppo广东移动通信有限公司 | 资源删除方法、装置、设备及存储介质 |
WO2021210527A1 (ja) * | 2020-04-13 | 2021-10-21 | LeapMind株式会社 | ニューラルネットワーク回路の制御方法 |
CN113538207A (zh) * | 2021-09-17 | 2021-10-22 | 北京鲸鲮信息系统技术有限公司 | 跨进程调用的图形渲染方法、装置、电子设备与存储介质 |
CN113806031A (zh) * | 2020-09-28 | 2021-12-17 | 京东科技控股股份有限公司 | 通过对象锁保护资源的方法和装置 |
CN114356591A (zh) * | 2020-10-14 | 2022-04-15 | 阿里巴巴集团控股有限公司 | 进程间通信方法、装置、物联网操作系统以及物联网设备 |
CN114756355A (zh) * | 2022-06-14 | 2022-07-15 | 之江实验室 | 一种计算机操作系统的进程自动快速恢复的方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9141439B2 (en) * | 2010-10-11 | 2015-09-22 | Sap Se | System and method for reporting a synchronization event in a runtime system of a computer system |
US9424092B2 (en) * | 2014-09-26 | 2016-08-23 | Microsoft Technology Licensing, Llc | Heterogeneous thread scheduling |
US10901920B2 (en) * | 2018-06-03 | 2021-01-26 | Apple Inc. | Turnstile API for runtime priority boosting |
CN109271258B (zh) * | 2018-08-28 | 2020-11-17 | 百度在线网络技术(北京)有限公司 | 读写锁重入的实现方法、装置、终端及存储介质 |
-
2022
- 2022-08-08 CN CN202210944519.XA patent/CN115016948B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525780A (en) * | 1981-05-22 | 1985-06-25 | Data General Corporation | Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
CN108647087A (zh) * | 2018-05-17 | 2018-10-12 | 腾讯科技(深圳)有限公司 | 实现php内核可重入的方法、装置、服务器和存储介质 |
CN109165516A (zh) * | 2018-08-14 | 2019-01-08 | 中国银联股份有限公司 | 一种访问控制方法和装置 |
WO2021155529A1 (zh) * | 2020-02-06 | 2021-08-12 | Oppo广东移动通信有限公司 | 资源删除方法、装置、设备及存储介质 |
WO2021210527A1 (ja) * | 2020-04-13 | 2021-10-21 | LeapMind株式会社 | ニューラルネットワーク回路の制御方法 |
CN111582562A (zh) * | 2020-04-20 | 2020-08-25 | 杭州意能电力技术有限公司 | 一种基于优化控制平台的神经网络预测控制方法 |
CN113806031A (zh) * | 2020-09-28 | 2021-12-17 | 京东科技控股股份有限公司 | 通过对象锁保护资源的方法和装置 |
CN114356591A (zh) * | 2020-10-14 | 2022-04-15 | 阿里巴巴集团控股有限公司 | 进程间通信方法、装置、物联网操作系统以及物联网设备 |
CN113538207A (zh) * | 2021-09-17 | 2021-10-22 | 北京鲸鲮信息系统技术有限公司 | 跨进程调用的图形渲染方法、装置、电子设备与存储介质 |
CN114756355A (zh) * | 2022-06-14 | 2022-07-15 | 之江实验室 | 一种计算机操作系统的进程自动快速恢复的方法和装置 |
Non-Patent Citations (4)
Title |
---|
A new construction method of common embedded cross compiler tool based on newlib;Yang Yu ET AL;《2010 IEEE International Conference on Intelligent Computing and Intelligent Systems》;20101206;全文 * |
Newlib的研究与最小实现;张宇旻等;《电子科技大学学报》;20050831(第04期);526页 * |
基于国产处理器的软件化雷达中间件设计;门浩;《中国知网硕士学位论文全文数据库》;20220415;第2022年卷(第4期);全文 * |
多线程技术;李新明等;《小型微型计算机系统》;19980208(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115016948A (zh) | 2022-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10133598B2 (en) | Systems and methods of using a hypervisor to assign virtual processor priority based on task priority and to schedule virtual processors for guest operating systems | |
KR100898315B1 (ko) | 인핸스드 런타임 호스팅 | |
US6904483B2 (en) | System and method for priority inheritance | |
US8276145B2 (en) | Protected mode scheduling of operations | |
AU2014311463B2 (en) | Virtual machine monitor configured to support latency sensitive virtual machines | |
US8490181B2 (en) | Deterministic serialization of access to shared resource in a multi-processor system for code instructions accessing resources in a non-deterministic order | |
US20090165007A1 (en) | Task-level thread scheduling and resource allocation | |
US9378069B2 (en) | Lock spin wait operation for multi-threaded applications in a multi-core computing environment | |
TW201411488A (zh) | 在作業系統中藉由多個程序對現場可程式設計閘陣列的使用的管理 | |
US20130152100A1 (en) | Method to guarantee real time processing of soft real-time operating system | |
CN112219196A (zh) | 表示用于无暂停垃圾收集的激活帧的方法和装置 | |
US7694302B1 (en) | Symmetric multiprocessor synchronization using migrating scheduling domains | |
EP0715732A1 (en) | Method and system for protecting shared code and data in a multitasking operating system | |
CN115016948B (zh) | 一种资源访问方法、装置、电子设备及可读存储介质 | |
US11385927B2 (en) | Interrupt servicing in userspace | |
Humphrey et al. | Kernel-level threads for dynamic, hard real-time environments | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
US20190310857A1 (en) | Method of Concurrent Instruction Execution and Parallel Work Balancing in Heterogeneous Computer Systems | |
US10922128B1 (en) | Efficiently managing the interruption of user-level critical sections | |
US20050050257A1 (en) | Nested locks to avoid mutex parking | |
CN114546628B (zh) | 一种线程处理方法、线程管理方法、装置以及设备 | |
US20230195523A1 (en) | Semiconductor device, control method for the same, and program | |
US20150293780A1 (en) | Method and System for Reconfigurable Virtual Single Processor Programming Model | |
Chen et al. | Real-Time Synchronization on Multiprocessors through Suspension or Spinning? | |
CN114443255A (zh) | 一种线程调用方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |