CN114356559A - 一种多线程控制方法及终端设备 - Google Patents
一种多线程控制方法及终端设备 Download PDFInfo
- Publication number
- CN114356559A CN114356559A CN202111577798.2A CN202111577798A CN114356559A CN 114356559 A CN114356559 A CN 114356559A CN 202111577798 A CN202111577798 A CN 202111577798A CN 114356559 A CN114356559 A CN 114356559A
- Authority
- CN
- China
- Prior art keywords
- thread
- shared lock
- preset queue
- state
- camera
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000000903 blocking effect Effects 0.000 claims abstract description 17
- 230000001276 controlling effect Effects 0.000 claims description 12
- 238000012163 sequencing technique Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 5
- 230000002618 waking effect Effects 0.000 claims description 5
- 230000002596 correlated effect Effects 0.000 claims description 4
- 230000002159 abnormal effect Effects 0.000 abstract description 5
- 230000000694 effects Effects 0.000 abstract description 4
- 230000002411 adverse Effects 0.000 abstract description 3
- 239000010410 layer Substances 0.000 description 26
- 230000008569 process Effects 0.000 description 20
- 238000012545 processing Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 9
- 238000012360 testing method Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000000875 corresponding effect Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000005236 sound signal Effects 0.000 description 3
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000012792 core layer Substances 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Landscapes
- Studio Devices (AREA)
Abstract
本发明公开了一种多线程控制方法及终端设备,若需要在第一线程中对设备进行目标操作时,可以控制第一线程处于阻塞状态,使得第一线程不会继续执行后续操作;此时,可以在第二线程中执行用于实现目标操作的程序,并根据执行结果,在第二线程中设置共享锁的状态标记;进而,可以根据共享锁的状态标记确定出第一操作是否执行成功,若执行成功再唤醒第一线程,解除第一线程的阻塞状态,可以在第一线程中继续执行后续操作;此时,在第一线程中执行后续操作时,因前面的目标操作执行成功,所以后续操作可以正常进行,并不会出现异常现象,避免了对后续操作造成不良影响,从而实现了异步环境下,不同线程的操作在同一线程下的顺序执行。
Description
技术领域
本发明涉及微处理器技术领域,尤指一种多线程控制方法及终端设备。
背景技术
在android系统中,提出了一套基于相机框架Camera1的相机api(即终端设备调用终端中相机的应用程序接口),此api中相机的打开和预览是在同一线程中顺序进行的,相机预览一定是在相机打开完成之后进行。
之后,又出现了新的相机框架,即Camera2,其中,相机打开和相机预览等都具有一个回调,通知用户此操作最终的执行结果,如果执行结果为成功,用户可以继续执行后续操作;并且,Camera2中,相机打开在第一线程,而相机打开的执行程序和回调均在第二线程,这样相机的操作不会影响其他业务处理,这一改进通常情况下对性能提升具有很大的帮助。
在android系统中,处理图像以及实现各种图像效果需要使用OpenGL(OpenGraphics Library,开放图像库),OpenGL处理图像需要在GLSurfaceView中显示;GLSurfaceView.Renderer(即GLSurfaceView渲染器)提供的接口可以将OpenGL绘制的图形渲染到SurfaceView中,Renderer(即渲染器)是在一个分离的线程中被调用,渲染操作是和界面线程解耦的,防止处理图像时堵塞主线程给用户卡顿的感觉;其中,这就要求相机打开和相机预览都必须在同一线程中进行。
并且,若在某个线程中需要进行相机打开和相机预览,在另一个线程中执行用于实现相机打开和相机预览的具体程序,如果未进行两个线程的同步操作,那么就会导致程序因为异步而出现程序错乱。
此外,基于Camera2,如果在某个线程(假设为A线程)中需要相机打开,但是相机打开是否执行成功的回调在另一个线程(假设为B线程)中,这样就会导致出现以下问题:
1、如果在A线程中需要相机预览,那么可能发生执行预览的时候,相机还没有打开,导致相机出现异常;
2、如果在B线程中需要相机预览,这又不符合前面提到的打开相机和相机预览都必须在同一线程中进行的要求。
因此,如何在异步环境中,避免出现程序错乱,是本领域技术人员亟待解决的技术问题。
发明内容
本发明实施例提供了一种多线程控制方法及终端设备,用以在异步环境中,避免出现程序错乱。
第一方面,本发明实施例提供了一种多线程控制方法,包括:
若需要在第一线程中对设备进行目标操作时,控制所述第一线程处于阻塞状态,且在所述第一线程中,设置共享锁的状态标记为初始值;
在第二线程中执行用于实现所述目标操作的程序,若执行后得到的结果为执行成功时,在所述第二线程中,设置所述共享锁的状态标记为目标值;
在所述第一线程中确定所述共享锁的状态标记为所述目标值时,唤醒所述第一线程。
第二方面,本发明实施例提供了一种多线程控制装置,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的所述程序指令,按照获得的程序执行如本发明实施例提供的上述多线程控制方法。
第三方面,本发明实施例提供了一种可读性存储介质,所述可读性存储介质存储有多线程控制装置可执行指令,所述多线程控制装置可执行指令用于使多线程控制装置执行如本发明实施例提供的上述多线程控制方法。
第四方面,本发明实施例提供了一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明实施例提供的上述多线程控制方法的步骤。
本发明有益效果如下:
本发明实施例提供的一种多线程控制方法及终端设备,若需要在第一线程中对设备进行目标操作时,可以控制第一线程处于阻塞状态,使得第一线程不会继续执行后续操作;此时,可以在第二线程中执行用于实现目标操作的程序,并根据执行结果,在第二线程中设置共享锁的状态标记;进而,可以根据共享锁的状态标记确定出第一操作是否执行成功,若执行成功再唤醒第一线程,解除第一线程的阻塞状态,可以在第一线程中继续执行后续操作;此时,在第一线程中执行后续操作时,因前面的目标操作执行成功,所以后续操作可以正常进行,并不会出现异常现象,避免了对后续操作造成不良影响,从而实现了异步环境下,不同线程的操作在同一线程下的顺序执行,避免异步环境中的不同步操作带来的异常。
附图说明
图1示例性示出了本发明实施例提供的一种终端设备的结构示意图;
图2示例性示出了本发明实施例提供的一种终端设备的软件架构示意图;
图3示例性示出了本发明实施例提供的一种多线程控制方法的流程图;
图4示例性示出了本发明实施例提供的一种实施例的流程图;
图5示例性示出了本发明实施例提供的另一种实施例的流程图;
图6示例性示出了本发明实施例提供的一种多线程控制装置的结构示意图。
具体实施方式
下面将结合附图对本发明实施例中的技术方案进行清除、详尽地描述。其中,在本发明实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;文本中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,另外,在本发明实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本发明实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的那些组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
本发明中使用的术语“模块”,是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
图1示出了终端设备100的结构示意图。
下面以终端设备100为例对实施例进行具体说明。应该理解的是,图1所示终端设备100仅是一个范例,并且终端设备100可以具有比图1中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
图1中示例性示出了根据示例性实施例中终端设备100的硬件配置框图。如图1所示,终端设备100包括:射频(Radio Frequency,RF)电路110、存储器120、显示单元130、摄像头140、传感器150、音频电路160、无线保真(Wireless Fidelity,Wi-Fi)模块170、处理器180、蓝牙模块181、以及电源190等部件。
RF电路110可用于在收发信息或通话过程中信号的接收和发送,可以接收基站的下行数据后交给处理器180处理;可以将上行数据发送给基站。通常,RF电路包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器、双工器等器件。
存储器120可用于存储软件程序及数据。处理器180通过运行存储在存储器120的软件程序或数据,从而执行终端设备100的各种功能以及数据处理。存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。存储器120存储有使得终端设备100能运行的操作系统。本发明中存储器120可以存储操作系统及各种应用程序,还可以存储执行本发明实施例所述方法的代码。
显示单元130可用于接收输入的数字或字符信息,产生与终端设备100的用户设置以及功能控制有关的信号输入,具体地,显示单元130可以包括设置在终端设备100正面的触摸屏131,可收集用户在其上或附近的触摸操作,例如点击按钮,拖动滚动框等。
显示单元130还可用于显示由用户输入的信息或提供给用户的信息以及终端100的各种菜单的图形用户界面(Graphical User Interface,GUI)。具体地,显示单元130可以包括设置在终端设备100正面的显示屏132。其中,显示屏132可以采用液晶显示器、发光二极管等形式来配置。显示单元130可以用于显示本发明中所述的各种图形用户界面。
其中,触摸屏131可以覆盖在显示屏132之上,也可以将触摸屏131与显示屏132集成而实现终端设备100的输入和输出功能,集成后可以简称触摸显示屏。本发明中显示单元130可以显示应用程序以及对应的操作步骤。
摄像头140可用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(Charge Coupled Device,CCD)或互补金属氧化物半导体(Complementary Metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给处理器180转换成数字图像信号。
终端设备100还可以包括至少一种传感器150,比如加速度传感器151、距离传感器152、指纹传感器153、温度传感器154。终端设备100还可配置有陀螺仪、气压计、湿度计、温度计、红外线传感器、光传感器、运动传感器等其他传感器。
音频电路160、扬声器161、麦克风162可提供用户与终端设备100之间的音频接口。音频电路160可将接收到的音频数据转换后的电信号,传输到扬声器161,由扬声器161转换为声音信号输出。终端设备100还可配置音量按钮,用于调节声音信号的音量。另一方面,麦克风162将收集的声音信号转换为电信号,由音频电路160接收后转换为音频数据,再将音频数据输出至RF电路110以发送给比如另一终端,或者将音频数据输出至存储器120以便进一步处理。本发明中麦克风162可以获取用户的语音。
Wi-Fi属于短距离无线传输技术,终端设备100可以通过Wi-Fi模块170帮助用户收发电子邮件、浏览网页和访问流媒体等,它为用户提供了无线的宽带互联网访问。
处理器180是终端设备100的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储器120内的软件程序,以及调用存储在存储器120内的数据,执行终端设备100的各种功能和处理数据。在一些实施例中,处理器180可包括一个或多个处理单元;处理器180还可以集成应用处理器和基带处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,基带处理器主要处理无线通信。可以理解的是,上述基带处理器也可以不集成到处理器180中。本发明中处理器180可以运行操作系统、应用程序、用户界面显示及触控响应,以及本发明实施例所述的处理方法。另外,处理器180与显示单元130和摄像头140耦接。
蓝牙模块181,用于通过蓝牙协议来与其他具有蓝牙模块的蓝牙设备进行信息交互。例如,终端设备100可以通过蓝牙模块181与同样具备蓝牙模块的可穿戴电子设备(例如智能手表)建立蓝牙连接,从而进行数据交互。
终端设备100还包括给各个部件供电的电源190(比如电池)。电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系统实现管理充电、放电以及功耗等功能。终端设备100还可配置有电源按钮,用于终端的开机和关机,以及锁屏等功能。
图2是本发明实施例的终端设备100的软件结构框图。
分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
应用程序层可以包括一系列应用程序包。
如图2所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(ApplicationProgramming Interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供终端设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,终端设备振动,指示灯闪烁等。
安卓运行时包括核心库和虚拟机,安卓运行时负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。
2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
下面结合捕获拍照场景,示例性说明终端设备100软件以及硬件的工作流程。
当触摸屏131接收到触摸操作,相应的硬件中断被发给内核层。内核层将触摸操作加工成原始输入事件(包括触摸坐标,触摸操作的时间戳等信息)。原始输入事件被存储在内核层。应用程序框架层从内核层获取原始输入事件,识别该输入事件所对应的控件。以该触摸操作是触摸单击操作,该单击操作所对应的控件为相机应用图标的控件为例,相机应用调用应用框架层的接口,启动相机应用,进而通过调用内核层启动摄像头驱动,通过摄像头140捕获静态图像或视频。
本发明实施例中的终端设备100可以为手机、平板电脑、可穿戴设备、笔记本电脑以及电视等。
申请人在研究中发现,对于有规定的特定场景,为了实现在异步环境中,避免出现程序错乱,目前的解决方案为延迟操作,具体过程包括:
先进行评估测试,统计出从相机打开到相机开启成功的间隔时间,在操作很多次后,得出一个最长时间(用t表示);
之后,当相机开启后开始计时,在时间大于t的时刻再进行相机预览,就可以正常操作,避免相机出现异常。
此方案的弊端为:虽然采用延迟时间大于t,看上去时间够用,但是在其他情况(如设备此时的资源都用来处理其他情况)下,此时这个延迟时间可能不够而导致异常。
并且,对于延迟时间,即使做了多次测试,也不能规避所有的特殊情况,且延迟时间又不能过长。
因此,本发明实施例提供了一种多线程控制方法,用以在异步环境中,避免出现程序错乱。
具体地,本发明实施例提供的一种多线程控制方法,如图3所示,可以包括:
S301、若需要在第一线程中对设备进行目标操作时,控制第一线程处于阻塞状态,且在第一线程中,设置共享锁的状态标记为初始值;
其中,控制第一线程处于阻塞状态,可以理解为:
锁住第一线程,使得在第一线程不能执行后续操作。
并且,若将该多线程控制方法应用至相机处理的场景中时,设备可以为相机,目标操作可以为相机打开或相机预览等。
当然,在本发明实施例中,应用场景并不限于相机处理的场景,还可以应用至其他的异步线程的同步处理的场景,在此并不限定。
S302、在第二线程中执行用于实现目标操作的程序,若执行后得到的结果为执行成功时,在第二线程中,设置共享锁的状态标记为目标值;
S303、在第一线程中确定共享锁的状态标记为目标值时,唤醒第一线程。
也就是说,在确定出共享锁的状态标记为目标值时,即可以确定目标操作执行成功。
其中,唤醒第一线程,可以理解为:
解锁第一线程,解除第一线程的阻塞状态,使得可以在第一线程中执行后续操作。
如此,若需要在第一线程中对设备进行目标操作时,可以控制第一线程处于阻塞状态,使得第一线程不会继续执行后续操作;此时,可以在第二线程中执行用于实现目标操作的程序,并根据执行结果,在第二线程中设置共享锁的状态标记;进而,可以根据共享锁的状态标记确定出第一操作是否执行成功,若执行成功再唤醒第一线程,解除第一线程的阻塞状态,可以在第一线程中继续执行后续操作;此时,在第一线程中执行后续操作时,因前面的目标操作执行成功,所以后续操作可以正常进行,并不会出现异常现象,避免了对后续操作造成不良影响,从而实现了异步环境下,不同线程的操作在同一线程下的顺序执行,避免异步环境中的不同步操作带来的异常。
在一些实施例中,还包括:
在控制第一线程处于阻塞状态之后,在第一线程中,对共享锁的状态标记进行轮询;
在确定共享锁的状态标记为目标值时,结束轮询。
如此,通过轮询,可以及时有效地确定出共享锁的状态标记,进而及时有效地确定目标操作是否执行成功,便于及时有效地执行后续操作,保证了操作执行的实时性、提高了用户的体验感受。
在一些实施例中,在第一线程中,对共享锁的状态标记进行轮询,具体包括:
在第一线程中创建有轮询子线程时,在轮询子线程中,对共享锁的状态标记进行轮询。
如此,通过轮询子线程即可及时有效地确定出共享锁的状态标记,保证了操作执行的实时性、提高了用户的体验感受。
在一些实施例中,还包括:
若执行后得到的结果为执行失败时,保持共享锁的状态标记不变。
其中,初始值可以为0,目标值可以为1;或,初始值可以为1,目标值可以为0。
当然,初始值和目标值并不限于为0和1,还可以为其他可以实现标记功能的字符、数字、特殊符号、字母中的一种或多种组合,具体可以根据实际需要进行设置,在此并不限定。
如此,在执行失败时,可以保持共享锁的状态标记不变,从而在轮询时,若确定出共享锁的状态标记一直为初始值,则可以认为执行失败,进而无需唤醒第一线程,以避免此时唤醒第一线程时出现异常。
需要强调的是,在本发明实施例中,在控制第一线程处于阻塞状态时,在第一线程中设置共享锁的状态标记为目标值;后续在根据执行结果设置共享锁的状态标记时,若执行成功,可以调整为目标值,若执行失败,可以保持状态标记不变,以便于根据状态标记,可以更加明确地确定出目标操作是否成功执行。
在一些实施例中,在第一线程中,设置共享锁的状态标记为初始值,具体包括:
在第一线程中,获取共享锁,并判断是否获取成功;
若是,则在第一线程中,设置共享锁的状态标记为初始值,并在设置完成时释放共享锁;
若否,则控制第一线程加入预设队列,且占用预设队列中未被占用位置中排序序号最小的位置,待第一线程位于预设队列的队头,在第一线程中,再次获取共享锁,直至获取成功;
其中,在位于队头的线程,再次获取共享锁时,控制该线程从预设队列中脱离,且控制预设队列中的其余线程的排序序号依次减一;预设队列中各位置的排序序号与加入顺序正相关。
也就是说,在加入预设队列时,加入的越早,在预设队列中的位置的排序序号越小;加入的越晚,在预设队列中的位置的排序序号越大。
如此,通过上述方式设置共享锁的状态标记,在获取共享锁失败时,可以依据条件循环获取,直至获取成功,可以实现对共享锁的状态标记的有效设置,从而可以基于共享锁的状态标记,确定目标操作是否成功完成,实现异步环境下,不同线程的操作在同一线程中顺序执行。
在一些实施例中,在第二线程中,设置共享锁的状态标记为目标值,具体包括:
在第二线程中,获取共享锁,并判断是否获取成功;
若是,则在第二线程中,设置共享锁的状态标记为目标值,并在设置完成时释放共享锁;
若否,则控制第二线程加入预设队列,且占用预设队列中未被占用位置中排序序号最小的位置,待第二线程位于预设队列的队头,在第二线程中,再次获取共享锁,直至获取成功;
其中,在位于队头的线程,再次获取共享锁时,控制该线程从预设队列中脱离,且控制预设队列中的其余线程的排序序号依次减一;预设队列中各位置的排序序号与加入顺序正相关。
也就是说,若将上述介绍的在第一线程设置共享锁的状态标记的过程(记为过程1),在第二线程设置共享锁的状态标记的过程(记为过程2),那么,过程2与过程1基本类似。
在一些实施例中,还包括:
在再次获取共享锁之前,确定共享锁处于空闲状态。
其中,共享锁处于空闲状态,可以理解为:
没有线程获取共享锁的状态。
如此,在共享锁处于空闲状态时去获取,可以提高获取成功的几率,提高共享锁的状态标记的设置的效率,从而提高同一线程下相邻的两个操作的执行效率,提高用户的体验感受。
需要说明的是,在具体实施时,若将上述内容提及的第一线程和第二线程看成是一个线程组时,这样的线程组可以具有至少一个;尤其是在存在多个这样的线程组时,可能会存在多个线程同时获取共享锁的情况,以三个线程同时获取共享锁为例,那么:
在这三个线程同时获取共享锁时,其中一个线程可能会获取成功,而其余的两个线程则会获取失败;
所以,获取失败的两个线程需要加入至预设队列中进行等待,在两个线程中的任一个位于预设队列的队头,且共享锁处于空闲状态时,可以尝试再次获取共享锁,以便于提高获取成功的几率。
并且,上述内容只是基于目标操作这一个操作进行说明的,而在实际情况中,在第一线程中,可能需要执行多个目标操作,也即执行完第一个目标操作之后,还需要执行第二个目标操作,例如相机打开和相机预览,此时,不管对于哪一个目标操作,均可以按照上述实施例去执行。
下面结合具体实施例,对本发明实施例提供的上述多线程控制方法进行说明。
实施例:结合图4所示,以相机打开和相机预览,初始值为1,目标值为0为例进行说明。
S401、若需要在第一线程中进行相机打开时,在第一线程中设置共享锁的状态标记为1,且阻塞第一线程;在轮询子线程中,对共享锁的状态标记进行轮询;
其中,共享锁为一全局锁,各个线程均可以对共享锁进行设置。
并且,阻塞第一线程,即为控制第一线程处于阻塞状态。
S402、在第二线程中,执行具体的相机打开程序,并根据回调确定相机是否成功打开;若成功打开,则在第二线程中将共享锁的状态标记设置为0,执行S403;若未成功打开,在第二线程中保持共享锁的状态标记为1,并通知用户打开失败,结束流程;
其中,共享锁的状态标记为0,可以表示在第一线程可以继续执行下一个操作,例如相机预览。
并且,若未成功打开,可能是相机出现了问题,所以此时不能再继续执行相机打开过程,而是需要退出该流程,对相机进行检查。
S403、若通过轮询确定出共享锁当前的状态标记为0,则确定相机成功打开,唤醒第一线程,同时结束轮询;
其中,轮询子线程可以为在第一线程内创建的一个子线程。
S404、若需要在第一线程钟进行相机预览时,在第一线程中设置共享锁的状态标记为1,且阻塞第一线程;在轮询子线程中,对共享锁的状态标记进行轮询;
S405、在第三线程中,执行具体的相机预览程序,并根据回调确定相机是否成功预览;若成功预览,则在第三线程中将共享锁的状态标记设置为0,执行S406;若未成功预览,在第三线程中保持共享锁的状态标记为1,并通知用户预览失败,结束流程;
其中,若未成功预览,可能是相机出现了问题,所以此时不能再继续执行相机预览过程,而是需要退出该流程,对相机进行检查。
S406、若通过轮询确定出共享锁当前的状态标记为0,则确定相机成功预览,唤醒第一线程,同时结束轮询;
S407、在第一线程中接收第三线程反馈的图像数据,并对图像数据进行图像处理。
基于上述过程,做了实际的测试分析,基于测试结果可以得到以下结论:
采用上述实施例中给出的过程执行相机打开和相机预览,并作为测试组;采用现有技术的延迟操作的方式执行相机打开和相机预览,作为对照组;
其中,在对照组中,若延迟2秒,成功执行整个操作(即包括相机打开和相机预览的操作)的概率仅为60%,如果延迟4秒成功的概率为90%;虽然延迟4秒时成功的概率较高,但是4秒的延迟太久,这会造成用户开启相机的时候,停留在黑色的背景界面中达3秒,用户基本无法接受这种情况(之所以用户感觉比延迟时间短,主要由于开始初始化背景的时间用户不会计算在内);
而在测试组中,2秒内即可处理完成相机打开和相机预览的操作,极端情况下不到1秒就可以完成,显然处理速度与对照组相比较,有了非常大的提高。
实施例:结合图5所示,针对设置共享锁的状态标记的过程;并且,下面过程可以适用于任何一个线程,此实施例以第一线程为例进行说明。
S501、在第一线程中,获取共享锁,并判断是否获取成功;若是,在第一线程中将共享锁的状态标记设置为初始值,再执行S503;若否,控制第一线程加入预设队列,且占用预设队列中未被占用位置中排序序号最小的位置,执行S502;
说明一点,在本发明实施例,且并不限于此实施例,适用于多个线程同时对共享锁进行操作的情况,同时也适用于同一时刻仅有一个线程对共享锁进行操作的情况。
S502、待预设队列中第一线程位于对头时,判断共享锁当前是否处于空闲状态;若是,则回到S501;若否,则等待直至处于空闲状态,即继续执行本步骤;
其中,预设队列中可能会存在多个线程,排在对头的线程(假设为第一线程)去尝试再次获取共享锁时,排在队头之后的线程则处于等待阶段,在第一线程去尝试再次获取时,第一线程需要从预设队列中脱离,同时后面的线程所在位置的排序序号需要依次向前移动一位,使得原先排在第二位的线程移动至队头,原先排在第三位的线程移动至第二位,以此类推。
例如,以预设队列中存在三个线程为例,三个线程分别标记为A线程、B线程和C线程,且假设A线程因最先加入预设队列所以排在队头,B线程第二个加入预设队列所以排在第二位,C线程第三个加入预设队列所以排在第三位,那么:
在A线程获取共享锁时,脱离预设队列,同时B线程移动至队头,C线程移动至第二位;
若A线程获取失败,需要继续加入至预设队列,并排在第三位。
对于B线程和C线程与A线程类似,再次不再详述。
S503、在第一线程中释放共享锁。
其中,释放成功之后,则存在以下几种可能:
第一线程离开预设队列(针对第一线程在此之前已经加入预设队列的情况);
或,第一线程重新加入至预设队列,且排在预设队列中未被占用位置中排序序号最小的位置;
或,第一线程保持在预设队列之外(针对第一线程一直未加入预设队列的情况)。
并且,在释放共享锁时,若释放不成功,则可以继续释放,直至释放成功。
基于同一发明构思,本发明实施例提供了一种多线程控制装置,该装置的实现原理与前述一种多线程控制方法的实现原理类似,该装置的具体实现方式可参见前述方法的具体实施例,重复之处不再赘述。
具体地,本发明实施例提供的一种多线程控制装置,如图6所示,可以包括:
存储器601,用于存储程序指令;
处理器602,用于调用存储器601中存储的程序指令,按照获得的程序执行如本发明实施例提供的上述多线程控制方法。
基于同一发明构思,本发明实施例提供了一种可读性存储介质,可读性存储介质存储有多线程控制装置可执行指令,多线程控制装置可执行指令用于使多线程控制装置执行如本发明实施例提供的上述多线程控制方法。
基于同一发明构思,本发明实施例提供了一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如本发明实施例提供的上述多线程控制方法的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种多线程控制方法,其特征在于,包括:
若需要在第一线程中对设备进行目标操作时,控制所述第一线程处于阻塞状态,且在所述第一线程中,设置共享锁的状态标记为初始值;
在第二线程中执行用于实现所述目标操作的程序,若执行后得到的结果为执行成功时,在所述第二线程中,设置所述共享锁的状态标记为目标值;
在所述第一线程中确定所述共享锁的状态标记为所述目标值时,唤醒所述第一线程。
2.如权利要求1所述的方法,其特征在于,还包括:
若执行后得到的结果为执行失败时,保持所述共享锁的状态标记不变。
3.如权利要求1所述的方法,其特征在于,在所述第一线程中,设置所述共享锁的状态标记为初始值,具体包括:
在所述第一线程中,获取所述共享锁,并判断是否获取成功;
若是,则在所述第一线程中,设置所述共享锁的状态标记为所述初始值,并在设置完成时释放所述共享锁;
若否,则控制所述第一线程加入预设队列,且占用所述预设队列中未被占用位置中排序序号最小的位置,待所述第一线程位于所述预设队列的队头,在所述第一线程中,再次获取所述共享锁,直至获取成功;
其中,在位于所述队头的线程,再次获取所述共享锁时,控制该线程从所述预设队列中脱离,且控制所述预设队列中的其余线程的排序序号依次减一;所述预设队列中各位置的排序序号与加入顺序正相关。
4.如权利要求1所述的方法,其特征在于,在所述第二线程中,设置所述共享锁的状态标记为目标值,具体包括:
在所述第二线程中,获取所述共享锁,并判断是否获取成功;
若是,则在所述第二线程中,设置所述共享锁的状态标记为所述目标值,并在设置完成时释放所述共享锁;
若否,则控制所述第二线程加入预设队列,且占用所述预设队列中未被占用位置中排序序号最小的位置,待所述第二线程位于所述预设队列的队头,在所述第二线程中,再次获取所述共享锁,直至获取成功;
其中,在位于所述队头的线程,再次获取所述共享锁时,控制该线程从所述预设队列中脱离,且控制所述预设队列中的其余线程的排序序号依次减一;所述预设队列中各位置的排序序号与加入顺序正相关。
5.如权利要求3或4所述的方法,其特征在于,还包括:
在再次获取所述共享锁之前,确定所述共享锁处于空闲状态。
6.如权利要求1所述的方法,其特征在于,还包括:
在控制所述第一线程处于所述阻塞状态之后,在所述第一线程中,对所述共享锁的状态标记进行轮询;
在确定所述共享锁的状态标记为所述目标值时,结束所述轮询。
7.如权利要求6所述的方法,其特征在于,在所述第一线程中,对所述共享锁的状态标记进行轮询,具体包括:
在所述第一线程中创建有轮询子线程时,在所述轮询子线程中,对所述共享锁的状态标记进行轮询。
8.一种多线程控制装置,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的所述程序指令,按照获得的程序执行如权利要求1-7任一项所述的多线程控制方法。
9.一种可读性存储介质,其特征在于,所述可读性存储介质存储有多线程控制装置可执行指令,所述多线程控制装置可执行指令用于使多线程控制装置执行如权利要求1-7任一项所述的多线程控制方法。
10.一种终端设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述的多线程控制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111577798.2A CN114356559A (zh) | 2021-12-22 | 2021-12-22 | 一种多线程控制方法及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111577798.2A CN114356559A (zh) | 2021-12-22 | 2021-12-22 | 一种多线程控制方法及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114356559A true CN114356559A (zh) | 2022-04-15 |
Family
ID=81102143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111577798.2A Pending CN114356559A (zh) | 2021-12-22 | 2021-12-22 | 一种多线程控制方法及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356559A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117076146A (zh) * | 2023-10-16 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN107015850A (zh) * | 2016-01-28 | 2017-08-04 | 博雅网络游戏开发(深圳)有限公司 | 线程调度方法和装置 |
CN107391539A (zh) * | 2017-04-28 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 事务处理方法、服务器和存储介质 |
CN109271260A (zh) * | 2018-08-28 | 2019-01-25 | 百度在线网络技术(北京)有限公司 | 临界区加锁方法、装置、终端及存储介质 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN112764941A (zh) * | 2021-01-26 | 2021-05-07 | 北京字节跳动网络技术有限公司 | 资源访问方法、装置、电子设备及计算机可读存储介质 |
-
2021
- 2021-12-22 CN CN202111577798.2A patent/CN114356559A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1917504A (zh) * | 2005-08-20 | 2007-02-21 | 中兴通讯股份有限公司 | 一种避免资源数据共享访问导致死锁的加锁方法 |
CN107015850A (zh) * | 2016-01-28 | 2017-08-04 | 博雅网络游戏开发(深圳)有限公司 | 线程调度方法和装置 |
CN107391539A (zh) * | 2017-04-28 | 2017-11-24 | 阿里巴巴集团控股有限公司 | 事务处理方法、服务器和存储介质 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN109271260A (zh) * | 2018-08-28 | 2019-01-25 | 百度在线网络技术(北京)有限公司 | 临界区加锁方法、装置、终端及存储介质 |
CN112764941A (zh) * | 2021-01-26 | 2021-05-07 | 北京字节跳动网络技术有限公司 | 资源访问方法、装置、电子设备及计算机可读存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117076146A (zh) * | 2023-10-16 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
CN117076146B (zh) * | 2023-10-16 | 2024-01-30 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111597000B (zh) | 一种小窗口管理方法及终端 | |
CN111367456A (zh) | 通信终端及多窗口模式下的显示方法 | |
CN111240546B (zh) | 一种分屏处理方法及通信终端 | |
CN111225108A (zh) | 一种通信终端及负屏界面的卡片显示方法 | |
CN112114733B (zh) | 一种截屏、录屏方法、移动终端及计算机存储介质 | |
CN112860145B (zh) | 一种应用的控制方法与电子设备 | |
CN111597004A (zh) | 终端及应用中用户界面显示方法 | |
CN114374813A (zh) | 多媒体资源管理方法、记录仪及服务器 | |
CN113709026B (zh) | 即时通信消息的处理方法、设备、存储介质和程序产品 | |
CN111176766A (zh) | 一种通信终端及组件显示方法 | |
CN113055585B (zh) | 拍摄界面的缩略图显示方法及移动终端 | |
CN114356559A (zh) | 一种多线程控制方法及终端设备 | |
CN113014614A (zh) | 一种设备控制方法、控制设备及被控设备 | |
CN113254132B (zh) | 一种应用显示方法及相关装置 | |
CN113253905B (zh) | 基于多指操作的触控方法及智能终端 | |
CN114449171A (zh) | 控制摄像头的方法、终端设备、存储介质及程序产品 | |
CN111225113A (zh) | 一种通信终端及通信终端的开机方法 | |
CN113900740A (zh) | 加载多项列表数据的方法及装置 | |
CN113507614A (zh) | 视频的播放进度调节方法及显示设备 | |
CN112114883A (zh) | 一种终端唤醒方法、终端及计算机存储介质 | |
CN111159734A (zh) | 通信终端及多应用数据互访处理方法 | |
CN111324255A (zh) | 一种基于双屏终端的应用处理方法及通信终端 | |
CN111142648B (zh) | 一种数据处理方法和智能终端 | |
CN111258699B (zh) | 一种页面显示方法及通信终端 | |
CN112000409B (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 | ||
CB02 | Change of applicant information |
Country or region after: China Address after: Shandong City, Qingdao Province, Jiangxi City Road No. 11 Applicant after: Qingdao Hisense Mobile Communication Technology Co.,Ltd. Address before: Shandong City, Qingdao Province, Jiangxi City Road No. 11 Applicant before: HISENSE MOBILE COMMUNICATIONS TECHNOLOGY Co.,Ltd. Country or region before: China |
|
CB02 | Change of applicant information |