CN106959900A - 一种防止多线程死锁的方法及装置 - Google Patents
一种防止多线程死锁的方法及装置 Download PDFInfo
- Publication number
- CN106959900A CN106959900A CN201710173205.3A CN201710173205A CN106959900A CN 106959900 A CN106959900 A CN 106959900A CN 201710173205 A CN201710173205 A CN 201710173205A CN 106959900 A CN106959900 A CN 106959900A
- Authority
- CN
- China
- Prior art keywords
- module
- target device
- judge
- application
- response data
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000007717 exclusion Effects 0.000 claims description 10
- 238000003306 harvesting Methods 0.000 claims description 4
- 238000007599 discharging Methods 0.000 claims description 3
- 230000002093 peripheral effect Effects 0.000 description 4
- 239000011800 void material Substances 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种防止多线程死锁的方法及装置,涉及通信领域。所述方法包括:当SDK接口在主线程状态时,申请全局互斥量的锁定权并判断是否申请成功,是则通过目标设备的写特征将报文发送给目标设备;创建辅助线程来通过目标设备的读特征接收目标设备返回的响应数据,当响应数据全部接收完成时,释放全局互斥量的锁定权;当SDK接口在子线程状态时,申请全局互斥量的锁定权,通过目标设备的写特征将报文发送给目标设备,通过目标设备的读特征接收目标设备返回的响应数据;当响应数据接收完成时,释放全局互斥量的锁定权。本发明的技术方案,在多线程同步运行的环境中,可以使各线程有效运行而不进入死锁,保障了线程安全。
Description
技术领域
本发明涉及通信领域,尤其涉及一种防止多线程死锁的方法及装置。
背景技术
现有技术中,在多线程同步运行的环境中,当一个或多个线程等待系统资源,而资源又被线程本身或者其他线程占用时,就形成了死锁。由于资源的占用是互斥的,故当某个线程提出申请资源后,使得有关线程在无外力协助下,永远分配不到必需的资源而无法继续运行,此时,我们也称该组线程是不安全的。因而,在多线程同步运行时,如何保障线程安全而不进入死锁,成为一个急需解决的问题。
发明内容
本发明为解决现有技术的不足,提供一种防止多线程解锁方法及装置。
一方面,本发明提供了一种防止多线程死锁的方法,包括:
当SDK接口在主线程状态时,执行以下操作:
步骤S1:申请全局互斥量的锁定权,判断是否申请成功,是则执行步骤S2,否则等待第一预设时间间隔后继续执行步骤S1;
步骤S2:判断目标设备是否已连接,是则执行步骤S3;否则连接所述目标设备,并获取所述目标设备的写特征和读特征,执行步骤S3;
步骤S3:创建辅助线程;
步骤S4:通过所述写特征将报文发送给所述目标设备;
步骤S5:判断所述目标设备返回的响应数据是否接收完成,是则执行步骤S6,否则等待第二预设时间间隔后,继续执行步骤S5;
步骤S6:释放所述全局互斥量的锁定权,返回所述响应数据,结束;
所述方法还包括:所述辅助线程通过所述读特征接收所述目标设备返回的响应数据;
当所述SDK接口在子线程状态时,执行以下操作:
步骤S7:申请全局互斥量的锁定权;
步骤S8:判断目标设备是否已连接,是则执行步骤S9;否则连接所述目标设备,并获取所述目标设备的读特征和写特征,执行步骤S9;
步骤S9:通过所述读特征接收到所述目标设备返回的响应数据;
步骤S10:通过所述写特征将报文发送给所述目标设备;
步骤S11:判断响应数据是否全部接收完成,是则执行步骤S12,否则等待第二预设时间间隔后,继续执行步骤S11;
步骤S12:释放所述全局互斥量的锁定权,返回所述响应数据,结束。
可选地,所述方法还包括:判断所述SDK接口所在的状态类型,如为主线程状态,则执行步骤S1;如为子线程状态,则执行步骤S7。
可选地,所述判断所述SDK接口所在的状态类型,具体为:
调用第一预设函数接口,并判断返回值是否为第一预设值,是则判定所述SDK接口所在的状态类型为主线程状态;否则,判定所述SDK接口所在的状态类型为子线程状态。
可选地,所述步骤S1之前,还包括:
步骤1:判断是否存在全局互斥量,是则执行步骤S1;否则创建所述全局互斥量,执行步骤S1;
所述步骤S7之前,还包括:
步骤2:判断是否存在所述全局互斥量,是则执行步骤S7;否则创建所述全局互斥量,执行步骤S7。
可选地,所述步骤S1中,所述申请全局互斥量的锁定权,判断是否申请成功,具体为:
调用第二函数接口打开全局互斥量,申请所述全局互斥量的锁定权,并判断所述第二函数接口的返回值的类型,如所述返回值为第二预设值,则判定申请成功;如所述返回值为第三预设值,则判定申请失败。
可选地,所述步骤S7中,所述申请全局互斥量的锁定权,具体为:
调用第八函数接口打开全局互斥量,申请所述全局互斥量的锁定权。
可选地,所述步骤S3,具体为:调用第二预设函数接口创建辅助线程。
可选地,所述通过所述写特征将报文发送给所述目标设备,具体为:
调用第三预设函数接口通过所述写特征将报文发送给所述目标设备。
可选地,所述通过所述读特征接收所述目标设备返回的响应数据之前,还包括:将接收标识复位;
通过所述读特征将所述目标设备返回的响应数据全部接收完成时,还包括:将所述接收标识置位;
所述判断响应数据是否接收完成,具体为:判断所述接收标识是否置位,是则判定响应数据接收完成,否则判定响应数据未接收完成。
可选地,所述释放所述全局互斥量的锁定权,具体为:调用第九函数接口释放所述全局互斥量的锁定权。
另一方面,本发明提供了一种防止多线程死锁的装置,包括:
第一申请模块,用于当SDK接口在主线程状态时,申请全局互斥量的锁定权;
第一判断模块,用于判断所述第一申请模块是否申请成功;
所述第一申请模块,还用于当所述第一判断模块判断出所述第一申请模块申请不成功时,等待第一预设时间间隔后继续申请全局互斥量的锁定权;
第二判断模块,用于当所述第一判断模块判断出所述第一申请模块申请成功时,判断目标设备是否已连接;
第一连接模块,用于当所述第二判断模块判断出目标设备未连接时,连接所述目标设备;
第一获取模块,用于在所述第一连接模块连接所述目标设备之后,获取所述目标设备的写特征和读特征;
第一创建模块,用于当所述第二判断模块判断出目标设备已连接时,创建辅助线程;还用于在所述第一获取模块获取所述目标设备的写特征和读特征之后,创建辅助线程;
第一发送模块,用于通过所述第一获取模块获取到的写特征将报文发送给所述目标设备;
第三判断模块,用于判断第一接收模块是否将所述目标设备返回的响应数据接收完成;还用于当自身判断出第一接收模块未将所述目标设备返回的响应数据接收完成时,等待第二预设时间间隔后,继续判断所述第一接收模块是否将所述目标设备返回的响应数据接收完成;
释放模块,用于当所述第三判断模块判断出所述第一接收模块将所述目标设备返回的响应数据接收完成时,释放所述全局互斥量的锁定权;
第二发送模块,用于当所述释放模块释放所述全局互斥量的锁定权之后,返回所述第一接收模块接收到的响应数据;
所述第一接收模块,用于所述辅助线程通过所述第一获取模块获取的读特征接收所述目标设备返回的响应数据;
第二申请模块,用于当SDK接口在子线程状态时,申请全局互斥量的锁定权;
第四判断模块,用于在所述第二申请模块申请全局互斥量的锁定权之后,判断目标设备是否已连接;
第二连接模块,用于当所述第四判断模块判断出目标设备未连接时,连接所述目标设备;
第二获取模块,用于在第二连接模块连接所述目标设备之后,获取所述目标设备的读特征和写特征;
第二接收模块,用于通过所述第二获取模块获取到的读特征接收所述目标设备返回的响应数据;
所述第一发送模块,还用于通过所述第二获取模块获取到的写特征将报文发送给所述目标设备;
所述第三判断模块,还用于判断所述第二接收模块是否将所述目标设备返回的响应数据接收完成;还用于当自身判断出所述第二接收模块未将所述目标设备返回的响应数据接收完成时,等待第二预设时间间隔后继续判断所述第二接收模块是否将所述目标设备返回的响应数据接收完成;
所述释放模块,还用于当所述第三判断模块判断出所述第二接收模块将所述目标设备返回的响应数据接收完成时,释放所述全局互斥量的锁定权。
可选地,所述装置还包括:第五判断模块;
所述第五判断模块,用于判断所述SDK接口所在的状态类型;
所述第一申请模块,具体用于:当所述第五判断模块判断出所述SDK接口所在的状态类型为主线程状态时,申请全局互斥量的锁定权;
所述第二申请模块,具体用于:当所述第五判断模块判断出所述SDK接口所在的状态类型为子线程状态时,申请全局互斥量的锁定权。
可选地,所述第五判断模块,具体用于:调用第一预设函数接口,并判断返回值是否为第一预设值,是则判定所述SDK接口所在的状态类型为主线程状态;否则,判定所述SDK接口所在的状态类型为子线程状态。
可选地,所述装置还包括:第六判断模块、第二创建模块、第七判断模块和第三创建模块;
所述第六判断模块,用于在所述第一申请模块申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
所述第二创建模块,用于当所述第六判断模块判断出不存在全局互斥量时,创建全局互斥量;
所述第一申请模块,具体用于:当所述第六判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在所述第二创建模块创建全局互斥量之后,申请全局互斥量的锁定权;
所述第七判断模块,用于在所述第二申请模块申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
所述第三创建模块,用于当所述第七判断模块判断出不存在全局互斥量时,创建全局互斥量;
所述第二申请模块,具体用于:当所述第七判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在所述第三创建模块创建全局互斥量之后,申请全局互斥量的锁定权。
可选地,所述第一申请模块,具体用于:调用第二函数接口打开全局互斥量,申请所述全局互斥量的锁定权;
所述第一判断模块,具体用于:判断所述第二函数接口的返回值的类型,如所述返回值为第二预设值,则判定申请成功;如所述返回值为第三预设值,则判定申请失败。
可选地,所述第二申请模块,具体用于:调用第八函数接口打开全局互斥量,申请所述全局互斥量的锁定权。
可选地,所述第一创建模块,具体用于:调用第二预设函数接口创建辅助线程。
可选地,所述第一发送模块,具体用于:调用第三预设函数接口通过所述写特征将报文发送给所述目标设备。
可选地,所述装置还包括:复位模块和置位模块;
所述复位模块,用于在所述第一接收模块接收所述目标设备返回的响应数据之前,将接收标识复位;还用于在所述第二接收模块通过所述第二获取模块获取到的读特征接收所述目标设备返回的响应数据之前,将接收标识复位;
所述置位模块,用于在所述第一接收模块将所述目标设备返回的响应数据接收完成时,将所述接收标识置位;还用于在所述第二接收模块通过所述第二获取模块获取到的读特征将所述目标设备返回的响应数据全部接收完成时,将所述接收标识置位;
所述第三判断模块,具体用于:判断所述接收标识是否置位,是则判定响应数据全部接收完成,否则判定响应数据未全部接收完成。
可选地,所述释放模块,具体用于:调用第九函数接口释放所述全局互斥量的锁定权。
本发明与现有技术相比,具有以下优点:
本发明的技术方案,在多线程同步运行的环境中,可以使各线程有效运行而不进入死锁,保障了线程安全。
附图说明
图1和图2为本发明实施例一提供的一种防止多线程死锁的方法流程图;
图3为本发明实施例二提供的一种iOS系统中防止多线程死锁的方法流程图;
图4为本发明实施例三提供的一种Android系统中防止多线程死锁的方法流程图;
图5为本发明实施例四提供的一种防止多线程死锁的装置的模块组成框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明中的目标设备可以为蓝牙设备、音频设备等。
实施例一
本发明实施例一提供一种防止多线程死锁的方法,包括:
当SDK接口在主线程状态时,如图1所示,执行以下操作:
步骤101:申请全局互斥量的锁定权,判断是否申请成功,是则执行步骤102,否则等待第一预设时间间隔后,继续执行步骤101;
步骤102:判断目标设备是否已连接,是则执行步骤103;否则连接目标设备,并获取目标设备的写特征和读特征,执行步骤103;
步骤103:创建辅助线程;
步骤104:通过获取到的写特征将报文发送给目标设备;
步骤105:判断目标蓝牙设备返回的响应数据是否接收完成,是则执行步骤106,否则等待第二预设时间间隔后,继续执行步骤105;
步骤106:释放全局互斥量的锁定权,返回响应数据,结束;
所述方法还包括:辅助线程通过获取到的读特征接收目标设备返回的响应数据;
当SDK接口在子线程状态时,如图2所示,执行以下操作:
步骤107:申请全局互斥量的锁定权;
步骤108:判断目标设备是否已连接,是则执行步骤109;否则连接目标设备,并获取目标设备的读特征和写特征,执行步骤109;
步骤109:通过获取到的读特征接收目标设备返回的响应数据;
步骤110:通过获取到的写特征将报文发送给目标设备;
步骤111:判断响应数据是否接收完成,是则执行步骤112,否则等待第二预设时间间隔后,继续执行步骤111;
步骤112:释放全局互斥量的锁定权,返回响应数据,结束。
本实施例中的方法,还包括:判断SDK接口所在的状态类型,如为主线程状态,则执行步骤101;如为子线程状态,则执行步骤107;
其中,判断SDK接口所在的状态类型,具体为:调用第一预设函数接口并判断返回值是否为第一预设值,是则判定SDK接口所在的状态类型为主线程状态;否则,判定SDK接口所在的状态类型为子线程状态。
在本实施例中,如移动设备的操作系统为IOS系统,则第一预设函数接口具体为第一函数接口,第一函数接口具体为:[[NSThread currentThread]isMainThread];
在本实施例中,如移动设备的操作系统为Android系统,则第一预设函数接口具体为第十函数接口和第十一函数接口,其中,第十函数接口具体为:Looper.myLooper(),第十一函数接口具体为:Looper.getMainLooper();
需要说明地,当第十函数接口和第十一函数接口的返回值均为第一预设值时,判定所在的状态类型为主线程状态;
优选地,在本实施例中,第一预设值为TRUE。
在本实施例中,步骤101之前,还包括:
步骤1:判断是否存在所述全局互斥量,是则执行步骤101;否则创建所述全局互斥量,执行步骤101;
步骤107之前,还包括:
步骤2:判断是否存在所述全局互斥量,是则执行步骤107;否则创建所述全局互斥量,执行步骤107。
本实施例步骤101中,申请全局互斥量的锁定权,判断是否申请成功,具体为:
调用第二函数接口打开全局互斥量,申请全局互斥量的锁定权,并判断第二函数接口的返回值的类型,如返回值为第二预设值,则判定申请成功;如返回值为第三预设值,则判定申请失败。
在本实施例中,第二函数接口具体为:int pthread_mutex_trylock(pthread_mutex_t*);其中参数pthread_mutex_t*为全局互斥量;
优选地,在本实施例中,第二预设值为0,第三预设值为EBUSY。
本实施例步骤107中,申请全局互斥量的锁定权,具体为:调用第八函数接口打开全局互斥量,申请全局互斥量的锁定权。
在本实施例中,第八函数接口具体为:int pthread_mutex_lock(pthread_mutex_t*mutex);其中,参数pthread_mutex_t*mutex为全局互斥量。
进一步地,在本实施例步骤103中,创建辅助线程,具体为:调用第二预设函数接口创建辅助线程;
具体地,如移动设备的操作系统为IOS系统,则第二预设函数接口具体为第六函数接口,第六函数接口具体为:dispatch_async(dispatch_get_global_queue(0,0),^{code});
如移动设备的的操作系统为Android系统,则第二预设函数接口具体为第十五函数接口,第十五函数接口具体为:New Thread(code)。
在本实施例中,所述通过获取到的写特征将报文发送给目标设备,具体为:调用第三预设函数接口通过获取到的写特征将报文发送给目标设备。
具体地,如移动设备的系统为iOS系统,则第三预设函数接口具体为第七函数接口,第七函数接口为:-(void)writeValue:(NSData*)data forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)type;
如移动设备的系统为Android系统,则第三预设函数接口具体为第十六函数接口和第十七函数接口,其中,第十六函数接口为public boolean setValue(byte[]value),第十七函数接口为public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic);
具体地,调用第十六函数接口将报文写至获取到的写特征中,调用第十七函数接口通过写特征将报文发送给目标设备。
更进一步地,在本实施例中,所述通过获取到的读特征接收目标设备返回的响应数据之之前,还包括:将接收标识复位;
通过获取到的读特征将目标设备返回的响应数据接收完成时,还包括:将接收标识置位;
对应地,判断响应数据是否接收完成,具体为,判断接收标识是否置位,是则判定响应数据接收完成,否则判定响应数据未接收完成。
在本实施例中,所述释放所述全局互斥量的锁定权,具体为:调用第九函数接口释放所述全局互斥量的锁定权;
在本实施例中,第九函数接口具体为int pthread_mutex_unlock(pthread_mutex_t*mutex)。
需说明地,在本实施例中,当上层应用调用SDK接口时,将报文传入SDK接口;对应地,上述返回响应数据,具体为:返回响应数据给上层应用。
实施例二
本发明实施例二提供一种iOS系统中防止多线程死锁的方法,当SDK接口被调用时,如图3所示,执行以下操作:
步骤201:判断所在的状态类型,如为主线程状态,则执行步骤202;如为子线程状态,则执行步骤211;
具体地,调用第一函数接口,并判断返回值的类型,如返回值为第一预设值,则判定所在的状态类型为主线程状态;否则,判定所在的状态类型为子线程状态;
在本实施例中,第一函数接口具体为:[[NSThread currentThread]isMainThread];
优选地,第一预设值为TRUE。
步骤202:判断是否存在全局互斥量,是则执行步骤204,否则执行步骤203;
步骤203:创建全局互斥量,执行步骤204;
步骤204:打开全局互斥量,申请全局互斥量的锁定权,并判断是否申请成功,是则执行步骤205;否则等待第一预设时间间隔后,继续执行步骤204;
具体地,调用第二函数接口打开全局互斥量,申请全局互斥量的锁定权,并判断第二函数接口返回值的类型,如返回值为第二预设值,则判定申请成功;如返回值为第三预设值,则判定申请失败;
在本实施例中,第二函数接口具体为:int pthread_mutex_trylock(pthread_mutex_t*);其中参数pthread_mutex_t*为全局互斥量。
优选地,在本实施例中,第二预设值为0,第三预设值为EBUSY,第一预设时间间隔优选为1s。
步骤205:判断目标设备是否已连接,是则执行步骤207;否则执行步骤206;
具体地,调用第三函数接口,并判断接收到的返回值是否为第四预设值,是则判定目标设备已连接;否则判定目标设备未连接;
在本实施例中,第三函数接口具体为:[peripheral state]。
优选地,第四预设值为CBPeripheralStateConnected。
步骤206:连接目标设备,并获取目标设备的读特征和写特征;
具体地,调用第四函数接口连接目标设备,并调用第五函数接口获取目标设备的服务中的所有特征,从获取到的所有特征中查找到读特征和写特征;
在本实施例中,第四函数接口具体为:-(void)connectPeripheral:(CBPeripheral*)peripheral options:(nullable NSDictionary<NSString*,id>*)options;
第五函数接口具体为:-(void)peripheral:(CBPeripheral*)peripheraldidDiscoverCharacteristicsForService:(CBService*)service error:(NSError*)error。
在本实施例中,目标设备中含有多个服务,每个服务对应多个特征,其中读特征又称接收特征,通过读特征接收目标设备返回的数据;写特征又称发送特征,通过写特征向目标设备发送数据。
步骤207:将接收标识复位;
具体地,将接收标识设置为0。
步骤208:创建辅助线程,所述辅助线程通过获取到的读特征等待并接收目标设备返回的响应数据;
具体地,调用第六函数接口创建辅助线程,所述辅助线程通过获取到的读特征接收目标设备返回的响应数据;
在本实施例中,第六函数接口具体为:dispatch_async(dispatch_get_global_queue(0,0),^{code});其中,第一个参数dispatch_get_global_queue(0,0)为创建的辅助线程,第二个参数code为辅助线程执行的代码片段;
步骤209:通过获取到的写特征将报文发送给目标设备;
具体地,调用第七函数接口通过获取到的写特征将报文发送给目标设备;
在本实施例中,第七函数接口具体为:
-(void)writeValue:(NSData*)data forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)type;其中,第一个参数data具体为报文,第二个参数CBCharacteristicWriteType具体为写特征。
例如,在本实施例中,报文为:<?xml version="1.0"encoding="UTF-8"?><T><D><M><k>456</k><v>123\n</v></M><M><k>金额</k><v>123.23\n</v><k>流水号</k><v>123456789012345600000000\n</v></M></D><E><M><k>转账人</k><v>12345678</v></M></E><F>hahaha</F></T>。
进一步地,在本实施例中,当目标设备接收到报文时,根据报文执行相应操作得到操作结果,根据操作结果组织响应数据并返回。
步骤210:当通过获取到的读特征将目标设备返回的响应数据接收完成时,将接收标识置位,执行步骤220;
在本实施例中,将接收标识置位,具体为:将接收标识设置为1。
步骤211:判断是否存在全局互斥量,是则执行步骤213,否则执行步骤212;
步骤212:创建全局互斥量,执行步骤213;
步骤213:打开全局互斥量,申请全局互斥量的锁定权;
具体地,调用第八函数接口打开全局互斥量,申请全局互斥量的锁定权;
在本实施例中,第八函数接口具体为:int pthread_mutex_lock(pthread_mutex_t*mutex);其中,参数pthread_mutex_t*mutex为全局互斥量。
步骤214:判断目标设备是否已连接,是则执行步骤216;否则执行步骤215;
本步骤中,判断目标设备是否已连接的方法,同步骤205中所述的方法相同,在此不再赘述。
步骤215:连接目标设备,并获取目标设备的读特征和写特征;
具体地,调用上述第四函数接口连接目标设备,并调用上述第五函数接口获取目标设备的读特征和写特征。
步骤216:将接收标识复位;
具体地,将接收标识设置为0。
步骤217:通过获取到的读特征等待并接收目标设备返回的响应数据;
步骤218:通过获取到的写特征将报文发送给目标设备;
具体地,调用上述第七函数接口通过获取到的写特征将报文发送给目标设备。
步骤219:当通过获取到的读特征将目标设备返回的响应数据接收完成时,将接收标识置位,执行步骤220;
在本实施例中,将接收标识置位,具体为:将接收标识设置为1。
步骤220:释放全局互斥量的锁定权,返回接收到的响应数据,结束。
具体地,调用第九函数接口释放全局互斥量的锁定权;
在本实施例中,第九函数接口具体为:int pthread_mutex_unlock(pthread_mutex_t*mutex);其中,参数pthread_mutex_t*mutex为全局互斥量。
需说明地,本实施例中,上层应用调用SDK接口时,将报文传入SDK接口;对应地,返回接收到的响应数据,具体为:返回接收到的响应数据给上层应用。
进一步地,在本实施例中,当通过获取到的读特征将目标设备返回的响应数据全部接收完成时,还包括:根据接收到的响应数据判断操作是否成功,是则显示成功信息,否则显示失败信息。
实施例三
本发明实施例三提供一种Android系统中防止多线程死锁的方法,当SDK接口被调用时,如图4所示,执行以下操作:
步骤301:判断所在的状态类型,如为主线程状态,则执行步骤302;如为子线程状态,则执行步骤311;
具体地,调用第十函数接口和第十一函数接口,并判断第十函数接口的返回值与第十一函数接口的返回值是否均为第一预设值,是则判定所在的状态类型为主线程状态;否则,判定所在的状态类型为子线程状态;
在本实施例中,第十函数接口具体为:Looper.myLooper();第十一函数接口具体为:Looper.getMainLooper();第一预设值优选为TRUE。
步骤302:判断是否存在全局互斥量,是则执行步骤304;否则执行步骤303;
步骤303:创建全局互斥量,执行步骤304;
步骤304:打开全局互斥量,申请全局互斥量的锁定权,并判断是否申请成功,则执行步骤305;否则等待第一预设时间间隔后继续执行步骤304;
具体地,调用第二函数接口打开全局互斥量,申请全局互斥量的锁定权,并判断第二函数接口返回值的类型,如返回值为第二预设值,则判定申请成功;如返回值为第三预设值,则判定申请失败;
在本实施例中,第二函数接口具体为:int pthread_mutex_trylock(pthread_mutex_t*);其中参数pthread_mutex_t*为全局互斥量;
优选地,在本实施例中,第二预设值为0,第三预设值为EBUSY,第一预设时间间隔为1s。
步骤305:判断目标设备是否已连接,是则执行步骤307;否则执行步骤306;
具体地,调用第十二函数接口,并判断接收到的返回值是否为第五预设值,是则判定目标设备已连接,否则判定目标设备未连接;
在本实施例中,第十二函数接口具体为:adapter.getProfileConnectionState(BluetoothProfile.HEADSET);
优选地,第五预设值为BluetoothProfile.STATE_CONNECTED。
步骤306:连接目标设备,并获取目标设备的读特征和写特征;
具体地,调用第十三函数接口连接目标设备,并分别根据读特征和写特征的UUID调用第十四函数接口获取目标设备的读特征和写特征;
在本实施例中,第十三函数接口具体为:public BluetoothGatt connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback);
第十四函数接口具体为:public BluetoothGattCharacteristicgetCharacteristic(UUID uuid)。
在本实施例中,目标设备中含有多个服务,每个服务对应多个特征,其中读特征又称接收特征,通过读特征接收目标设备返回的数据;写特征又称发送特征,通过写特征向目标设备发送数据。
步骤307:将接收标识复位;
具体地,将接收标识设置为0。
步骤308:创建辅助线程,所述辅助线程通过获取到的读特征等待并接收目标设备返回的响应数据;
具体地,调用第十五函数接口创建辅助线程,所述辅助线程调用第七函数接口接收目标设备返回的响应数据;
在本实施例中,第十五函数接口具体为:New Thread(code),其中参数code表示辅助线程执行的代码片段;
步骤309:通过获取到的写特征将报文发送给目标设备;
具体地,调用第十六函数接口将报文写至写特征中,并调用第十七函数接口通过写特征将报文发送给目标设备;
在本实施例中,第十六函数接口具体为:public boolean setValue(byte[]value)
第十七函数接口具体为:public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic);
例如,在本实施例中,报文为:<?xml version="1.0"encoding="UTF-8"?><T><D><M><k>456</k><v>123\n</v></M><M><k>金额</k><v>123.23\n</v><k>流水号</k><v>123456789012345600000000\n</v></M></D><E><M><k>转账人</k><v>12345678</v></M></E><F>hahaha</F></T>。
进一步地,在本实施例中,当目标设备接收到报文时,根据报文执行相应操作得到操作结果,根据操作结果组织响应数据并返回。
步骤310:当通过获取到的读特征将目标设备返回的响应数据接收完成时,将接收标识置位,执行步骤320;
在本实施例中,将接收标识置位,具体为:将接收标识设置为1。
步骤311:判断是否存在全局互斥量,是则执行步骤313,否则执行步骤312;
步骤312:创建全局互斥量,执行步骤313;
步骤313:打开全局互斥量,并获取全局互斥量的锁定权;
具体地,调用第八函数接口打开全局互斥量,并获取全局互斥量的锁定权;
在本实施例中,第八函数接口具体为:int pthread_mutex_lock(pthread_mutex_t*mutex);其中,参数pthread_mutex_t*mutex为全局互斥量。
步骤314:判断目标设备是否已连接,是则执行步骤316;否则执行步骤315;
本步骤中,判断目标设备是否已连接的方法,同步骤305中所述的方法相同,在此不再赘述。
步骤315:连接目标设备,并获取目标设备的读特征和写特征;
具体地,调用上述第十三函数接口连接目标设备,并调用上述第十四函数接口获取目标设备的读特征和写特征。
步骤316:将接收标识复位;
具体地,将接收标识设置为0。
步骤317:通过获取到的读特征等待并接收目标设备返回的响应数据;
步骤318:通过获取到的写特征将报文发送给目标设备;
本步骤的实现方法同步骤309的实现方法相同,在此不再赘述。
步骤319:当通过获取到的读特征将目标设备返回的响应数据接收完成时,将接收标识置位,执行步骤320;
在本实施例中,将接收标识置位,具体为:将接收标识设置为1。
步骤320:释放全局互斥量的锁定权,返回接收到的响应数据,结束。
具体地,调用第九函数接口释放全局互斥量的锁定权;
在本实施例中,第九函数接口具体为:int pthread_mutex_unlock(pthread_mutex_t*mutex);其中,参数pthread_mutex_t*mutex为全局互斥量。
需说明地,在本实施例中,上层应用调用SDK接口时,将报文传入SDK接口;对应地,返回接收到的响应数据,具体为:返回接收到的响应数据给上层应用。
进一步地,在本实施例中,当通过获取到的读特征将目标设备返回的响应数据全部接收完成时,还包括:根据接收到的响应数据判断操作是否成功,是则显示成功信息,否则显示失败信息。
实施例四
本发明实施例四提供一种防止多线程死锁的装置,如图5所示,包括:
第一申请模块401,用于当SDK接口在主线程状态时,申请全局互斥量的锁定权;
第一判断模块402,用于判断第一申请模块401是否申请成功;
第一申请模块401,还用于当第一判断模块402判断出第一申请模块401申请不成功时,等待第一预设时间间隔后继续申请全局互斥量的锁定权;
第二判断模块403,用于当第一判断模块402判断出第一申请模块401申请成功时,判断目标设备是否已连接;
第一连接模块404,用于当第二判断模块403判断出目标设备未连接时,连接目标设备;
第一获取模块405,用于在第一连接模块404连接目标设备之后,获取目标设备的写特征和读特征;
第一创建模块406,用于当第二判断模块403判断出目标设备已连接时,创建辅助线程;还用于在第一获取模块405获取目标设备的写特征和读特征之后,创建辅助线程;
第一接收模块407,用于所述辅助线程通过第一获取模块405获取的读特征接收目标设备返回的响应数据;
第一发送模块408,用于通过第一获取模块405获取到的写特征将报文发送给目标设备;
第三判断模块409,用于判断第一接收模块407是否将目标设备返回的响应数据接收完成;还用于当自身判断出第一接收模块407未将目标设备返回的响应数据接收完成时,等待第二预设时间间隔后,继续判断第一接收模块407是否将目标设备返回的响应数据接收完成;
释放模块410,用于当第三判断模块409判断出第一接收模块407将目标设备返回的响应数据接收完成时,释放全局互斥量的锁定权;
第二发送模块411,用于当释放模块410释放全局互斥量的锁定权之后,返回第一接收模块407接收到的响应数据;
第二申请模块412,用于当SDK接口在子线程状态时,申请全局互斥量的锁定权;
第四判断模块413,用于在第二申请模块412申请全局互斥量的锁定权之后,判断目标设备是否已连接;
第二连接模块414,用于当第四判断模块413判断出目标设备未连接时,连接目标设备;
第二获取模块415,用于在第二连接模块414连接目标设备之后,获取目标设备的读特征和写特征;
第二接收模块416,用于通过第二获取模块415获取到的读特征接收目标设备返回的响应数据;
第一发送模块408,还用于通过第二获取模块415获取到的写特征将报文发送给目标设备;
第三判断模块409,还用于判断第二接收模块416是否将目标设备返回的响应数据接收完成;还用于当自身判断出第二接收模块416未将目标设备返回的响应数据接收完成时,等待第二预设时间间隔后继续判断第二接收模块416是否将目标设备返回的响应数据接收完成;
释放模块410,还用于当第三判断模块409判断出第二接收模块416将目标设备返回的响应数据接收完成时,释放全局互斥量的锁定权。
本实施例中的装置,还包括:第五判断模块;
第五判断模块,用于判断SDK接口所在的状态类型;
第一申请模块401,具体用于:当第五判断模块判断出SDK接口所在的状态类型为主线程状态时,申请全局互斥量的锁定权;
第二申请模块412,具体用于:当第五判断模块判断出SDK接口所在的状态类型为子线程状态时,申请全局互斥量的锁定权。
在本实施例中,第五判断模块,具体用于:调用第一预设函数接口,并判断返回值是否为第一预设值,是则判定所述SDK接口所在的状态类型为主线程状态;否则,判定所述SDK接口所在的状态类型为子线程状态。
本实施例中的装置,还包括:第六判断模块、第二创建模块、第七判断模块和第三创建模块;
其中,第六判断模块,用于在第一申请模块401申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
第二创建模块,用于当第六判断模块判断出不存在全局互斥量时,创建全局互斥量;
第一申请模块401,具体用于:当第六判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在第二创建模块创建全局互斥量之后,申请全局互斥量的锁定权;
第七判断模块,用于在第二申请模块412申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
第三创建模块,用于当第七判断模块判断出不存在全局互斥量时,创建全局互斥量;
第二申请模块412,具体用于:当第七判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在第三创建模块创建全局互斥量之后,申请全局互斥量的锁定权。
进一步地,在本实施例中,第一申请模块401,具体用于:调用第二函数接口打开全局互斥量,申请全局互斥量的锁定权;
第一判断模块402,具体用于:判断所述第二函数接口的返回值的类型,如返回值为第二预设值,则判定申请成功;如返回值为第三预设值,则判定申请失败。
第二申请模块412,具体用于:调用第八函数接口打开全局互斥量,申请全局互斥量的锁定权。
第一创建模块406,具体用于:调用第二预设函数接口创建辅助线程。
第一发送模块408,具体用于:调用第三预设函数接口通过所述写特征将报文发送给目标设备。
本实施例中的装置,还包括:复位模块和置位模块;
其中,复位模块,用于在第一接收模块407接收目标设备返回的响应数据之前,将接收标识复位;还用于在第二接收模块416通过第二获取模块415获取到的读特征接收目标设备返回的响应数据之前,将接收标识复位;
置位模块,用于在第一接收模块407将目标设备返回的响应数据接收完成时,将接收标识置位;还用于在第二接收模块416通过第二获取模块415获取到的读特征将目标设备返回的响应数据接收完成时,将接收标识置位;
对应地,第三判断模块409,具体用于:判断所述接收标识是否置位,是则判定响应数据全部接收完成,否则判定响应数据未全部接收完成。
更进一步地,在本实施例中,释放模块410,具体用于:调用第九函数接口释放全局互斥量的锁定权。
本发明的技术方案,在多线程同步运行的环境中,可以使各线程有效运行而不进入死锁,保障了线程安全。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (20)
1.一种防止多线程死锁的方法,其特征在于,包括:
当SDK接口在主线程状态时,执行以下操作:
步骤S1:申请全局互斥量的锁定权,判断是否申请成功,是则执行步骤S2,否则等待第一预设时间间隔后继续执行步骤S1;
步骤S2:判断目标设备是否已连接,是则执行步骤S3;否则连接所述目标设备,并获取所述目标设备的写特征和读特征,执行步骤S3;
步骤S3:创建辅助线程;
步骤S4:通过所述写特征将报文发送给所述目标设备;
步骤S5:判断所述目标设备返回的响应数据是否接收完成,是则执行步骤S6,否则等待第二预设时间间隔后,继续执行步骤S5;
步骤S6:释放所述全局互斥量的锁定权,返回所述响应数据,结束;
所述方法还包括:所述辅助线程通过所述读特征接收所述目标设备返回的响应数据;
当所述SDK接口在子线程状态时,执行以下操作:
步骤S7:申请全局互斥量的锁定权;
步骤S8:判断目标设备是否已连接,是则执行步骤S9;否则连接所述目标设备,并获取所述目标设备的读特征和写特征,执行步骤S9;
步骤S9:通过所述读特征接收所述目标设备返回的响应数据;
步骤S10:通过所述写特征将报文发送给所述目标设备;
步骤S11:判断响应数据是否接收完成,是则执行步骤S12,否则等待第二预设时间间隔后,继续执行步骤S11;
步骤S12:释放所述全局互斥量的锁定权,返回所述响应数据,结束。
2.根据权利要求1所述的方法,其特征在于,还包括:判断所述SDK接口所在的状态类型,如为主线程状态,则执行步骤S1;如为子线程状态,则执行步骤S7。
3.根据权利要求2所述的方法,其特征在于,所述判断所述SDK接口所在的状态类型,具体为:
调用第一预设函数接口,并判断返回值是否为第一预设值,是则判定所述SDK接口所在的状态类型为主线程状态;否则,判定所述SDK接口所在的状态类型为子线程状态。
4.根据权利要求1所述的方法,其特征在于,
所述步骤S1之前,还包括:
步骤1:判断是否存在全局互斥量,是则执行步骤S1;否则创建所述全局互斥量,执行步骤S1;
所述步骤S7之前,还包括:
步骤2:判断是否存在所述全局互斥量,是则执行步骤S7;否则创建所述全局互斥量,执行步骤S7。
5.根据权利要求1所述的方法,其特征在于,所述步骤S1中,所述申请全局互斥量的锁定权,判断是否申请成功,具体为:
调用第二函数接口打开全局互斥量,申请所述全局互斥量的锁定权,并判断所述第二函数接口的返回值的类型,如所述返回值为第二预设值,则判定申请成功;如所述返回值为第三预设值,则判定申请失败。
6.根据权利要求1所述的方法,其特征在于,所述步骤S7中,所述申请全局互斥量的锁定权,具体为:
调用第八函数接口打开全局互斥量,申请所述全局互斥量的锁定权。
7.根据权利要求1所述的方法,其特征在于,所述步骤S3,具体为:调用第二预设函数接口创建辅助线程。
8.根据权利要求1所述的方法,其特征在于,所述通过所述写特征将报文发送给所述目标设备,具体为:
调用第三预设函数接口通过所述写特征将报文发送给所述目标设备。
9.根据权利要求1所述的方法,其特征在于,
所述通过所述读特征接收所述目标设备返回的响应数据之前,还包括:将接收标识复位;
通过所述读特征将所述目标设备返回的响应数据全部接收完成时,还包括:将所述接收标识置位;
所述判断响应数据是否接收完成,具体为:判断所述接收标识是否置位,是则判定响应数据接收完成,否则判定响应数据未接收完成。
10.根据权利要求1所述的方法,其特征在于,所述释放所述全局互斥量的锁定权,具体为:调用第九函数接口释放所述全局互斥量的锁定权。
11.一种防止多线程死锁的装置,其特征在于,包括:
第一申请模块,用于当SDK接口在主线程状态时,申请全局互斥量的锁定权;
第一判断模块,用于判断所述第一申请模块是否申请成功;
所述第一申请模块,还用于当所述第一判断模块判断出所述第一申请模块申请不成功时,等待第一预设时间间隔后继续申请全局互斥量的锁定权;
第二判断模块,用于当所述第一判断模块判断出所述第一申请模块申请成功时,判断目标设备是否已连接;
第一连接模块,用于当所述第二判断模块判断出目标设备未连接时,连接所述目标设备;
第一获取模块,用于在所述第一连接模块连接所述目标设备之后,获取所述目标设备的写特征和读特征;
第一创建模块,用于当所述第二判断模块判断出目标设备已连接时,创建辅助线程;还用于在所述第一获取模块获取所述目标设备的写特征和读特征之后,创建辅助线程;
第一发送模块,用于通过所述第一获取模块获取到的写特征将报文发送给所述目标设备;
第三判断模块,用于判断第一接收模块是否将所述目标设备返回的响应数据接收完成;还用于当自身判断出第一接收模块未将所述目标设备返回的响应数据接收完成时,等待第二预设时间间隔后,继续判断所述第一接收模块是否将所述目标设备返回的响应数据接收完成;
释放模块,用于当所述第三判断模块判断出所述第一接收模块将所述目标设备返回的响应数据接收完成时,释放所述全局互斥量的锁定权;
第二发送模块,用于当所述释放模块释放所述全局互斥量的锁定权之后,返回所述第一接收模块接收到的响应数据;
所述第一接收模块,用于所述辅助线程通过所述第一获取模块获取的读特征接收所述目标设备返回的响应数据;
第二申请模块,用于当SDK接口在子线程状态时,申请全局互斥量的锁定权;
第四判断模块,用于在所述第二申请模块申请全局互斥量的锁定权之后,判断目标设备是否已连接;
第二连接模块,用于当所述第四判断模块判断出目标设备未连接时,连接所述目标设备;
第二获取模块,用于在第二连接模块连接所述目标设备之后,获取所述目标设备的读特征和写特征;
第二接收模块,用于通过所述第二获取模块获取到的读特征接收所述目标设备返回的响应数据;
所述第一发送模块,还用于通过所述第二获取模块获取到的写特征将报文发送给所述目标设备;
所述第三判断模块,还用于判断所述第二接收模块是否将所述目标设备返回的响应数据接收完成;还用于当自身判断出所述第二接收模块未将所述目标设备返回的响应数据接收完成时,等待第二预设时间间隔后继续判断所述第二接收模块是否将所述目标设备返回的响应数据接收完成;
所述释放模块,还用于当所述第三判断模块判断出所述第二接收模块将所述目标设备返回的响应数据接收完成时,释放所述全局互斥量的锁定权。
12.根据权利要求11所述的装置,其特征在于,还包括:第五判断模块;
所述第五判断模块,用于判断所述SDK接口所在的状态类型;
所述第一申请模块,具体用于:当所述第五判断模块判断出所述SDK接口所在的状态类型为主线程状态时,申请全局互斥量的锁定权;
所述第二申请模块,具体用于:当所述第五判断模块判断出所述SDK接口所在的状态类型为子线程状态时,申请全局互斥量的锁定权。
13.根据权利要求12所述的装置,其特征在于,所述第五判断模块,具体用于:调用第一预设函数接口,并判断返回值是否为第一预设值,是则判定所述SDK接口所在的状态类型为主线程状态;否则,判定所述SDK接口所在的状态类型为子线程状态。
14.根据权利要求11所述的装置,其特征在于,还包括:第六判断模块、第二创建模块、第七判断模块和第三创建模块;
所述第六判断模块,用于在所述第一申请模块申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
所述第二创建模块,用于当所述第六判断模块判断出不存在全局互斥量时,创建全局互斥量;
所述第一申请模块,具体用于:当所述第六判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在所述第二创建模块创建全局互斥量之后,申请全局互斥量的锁定权;
所述第七判断模块,用于在所述第二申请模块申请全局互斥量的锁定权之前,判断是否存在全局互斥量;
所述第三创建模块,用于当所述第七判断模块判断出不存在全局互斥量时,创建全局互斥量;
所述第二申请模块,具体用于:当所述第七判断模块判断出存在全局互斥量时,申请全局互斥量的锁定权;还用于在所述第三创建模块创建全局互斥量之后,申请全局互斥量的锁定权。
15.根据权利要求11所述的装置,其特征在于,
所述第一申请模块,具体用于:调用第二函数接口打开全局互斥量,申请所述全局互斥量的锁定权;
所述第一判断模块,具体用于:判断所述第二函数接口的返回值的类型,如所述返回值为第二预设值,则判定申请成功;如所述返回值为第三预设值,则判定申请失败。
16.根据权利要求11所述的装置,其特征在于,所述第二申请模块,具体用于:调用第八函数接口打开全局互斥量,申请所述全局互斥量的锁定权。
17.根据权利要求11所述的装置,其特征在于,所述第一创建模块,具体用于:调用第二预设函数接口创建辅助线程。
18.根据权利要求11所述的装置,其特征在于,所述第一发送模块,具体用于:调用第三预设函数接口通过所述写特征将报文发送给所述目标设备。
19.根据权利要求11所述的装置,其特征在于,还包括:复位模块和置位模块;
所述复位模块,用于在所述第一接收模块接收所述目标设备返回的响应数据之前,将接收标识复位;还用于在所述第二接收模块通过所述第二获取模块获取到的读特征接收所述目标设备返回的响应数据之前,将接收标识复位;
所述置位模块,用于在所述第一接收模块将所述目标设备返回的响应数据接收完成时,将所述接收标识置位;还用于在所述第二接收模块通过所述第二获取模块获取到的读特征将所述目标设备返回的响应数据接收完成时,将所述接收标识置位;
所述第三判断模块,具体用于:判断所述接收标识是否置位,是则判定响应数据全部接收完成,否则判定响应数据未全部接收完成。
20.根据权利要求11所述的装置,其特征在于,所述释放模块,具体用于:调用第九函数接口释放所述全局互斥量的锁定权。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710173205.3A CN106959900B (zh) | 2017-03-22 | 2017-03-22 | 一种防止多线程死锁的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710173205.3A CN106959900B (zh) | 2017-03-22 | 2017-03-22 | 一种防止多线程死锁的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106959900A true CN106959900A (zh) | 2017-07-18 |
CN106959900B CN106959900B (zh) | 2020-05-19 |
Family
ID=59470359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710173205.3A Active CN106959900B (zh) | 2017-03-22 | 2017-03-22 | 一种防止多线程死锁的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106959900B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN108762941A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN110879726A (zh) * | 2019-10-24 | 2020-03-13 | 深圳数位传媒科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN113360280A (zh) * | 2021-06-02 | 2021-09-07 | 西安中锐创联科技有限公司 | 基于多线程运行、动态全局变量处理的仿真曲线显示方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1794185A (zh) * | 2005-12-30 | 2006-06-28 | 北京金山软件有限公司 | 一种多线程处理中的资源调用方法 |
US20100122253A1 (en) * | 2008-11-09 | 2010-05-13 | Mccart Perry Benjamin | System, method and computer program product for programming a concurrent software application |
CN101730266A (zh) * | 2009-12-02 | 2010-06-09 | 大连三通软件有限公司 | 一种基于移动通信网络的计分系统保持实时在线的方法 |
CN105188023A (zh) * | 2015-10-15 | 2015-12-23 | 飞天诚信科技股份有限公司 | 一种蓝牙通讯方法和通讯装置 |
CN106407020A (zh) * | 2016-11-23 | 2017-02-15 | 青岛海信移动通信技术股份有限公司 | 一种移动终端的数据库处理方法及其移动终端 |
-
2017
- 2017-03-22 CN CN201710173205.3A patent/CN106959900B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1794185A (zh) * | 2005-12-30 | 2006-06-28 | 北京金山软件有限公司 | 一种多线程处理中的资源调用方法 |
US20100122253A1 (en) * | 2008-11-09 | 2010-05-13 | Mccart Perry Benjamin | System, method and computer program product for programming a concurrent software application |
CN101730266A (zh) * | 2009-12-02 | 2010-06-09 | 大连三通软件有限公司 | 一种基于移动通信网络的计分系统保持实时在线的方法 |
CN105188023A (zh) * | 2015-10-15 | 2015-12-23 | 飞天诚信科技股份有限公司 | 一种蓝牙通讯方法和通讯装置 |
CN106407020A (zh) * | 2016-11-23 | 2017-02-15 | 青岛海信移动通信技术股份有限公司 | 一种移动终端的数据库处理方法及其移动终端 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762942A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN108762941A (zh) * | 2018-04-12 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN108762942B (zh) * | 2018-04-12 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 多线程访问方法及装置 |
CN110879726A (zh) * | 2019-10-24 | 2020-03-13 | 深圳数位传媒科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN110879726B (zh) * | 2019-10-24 | 2023-09-26 | 深圳数位大数据科技有限公司 | 移动终端应用程序的保活方法及装置 |
CN113360280A (zh) * | 2021-06-02 | 2021-09-07 | 西安中锐创联科技有限公司 | 基于多线程运行、动态全局变量处理的仿真曲线显示方法 |
CN113360280B (zh) * | 2021-06-02 | 2023-11-28 | 西安中锐创联科技有限公司 | 基于多线程运行、动态全局变量处理的仿真曲线显示方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106959900B (zh) | 2020-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106959900A (zh) | 一种防止多线程死锁的方法及装置 | |
Farkas et al. | The inference problem: a survey | |
CN102542189B (zh) | 一种认证的方法、装置及电子设备 | |
CN106897146A (zh) | 一种终端的麦克风的数据处理方法和具有麦克风的终端 | |
CN108024292B (zh) | 一种资源排除方法及装置 | |
CN103020810A (zh) | 一种日程计划共享系统及方法 | |
CN109246628B (zh) | 一种基于空中客车数字集群系统的无线调度台及实现方法 | |
CN106778381A (zh) | 一种重要信息处理方法及终端 | |
CN103873256B (zh) | 一种nfc令牌的工作方法 | |
CN103605473A (zh) | 一种移动终端触摸屏解锁的方法及移动终端 | |
CN102891920B (zh) | 一种信息变更通知方法、联系人信息更新的方法及装置 | |
CN106470279A (zh) | 一种多卡通信设置方法及移动终端 | |
CN106507223B (zh) | 对讲机的常规模式、数字集群和模拟集群自适应切换方法 | |
CN102831340A (zh) | 电子设备的解锁装置及其解锁方法 | |
CN105653234B (zh) | 一种可自动调节音频参数的方法及装置 | |
CN100518091C (zh) | 一种提高网管界面锁定安全性的实现方法 | |
CN104506948A (zh) | 一种中间件与用户界面之间的消息传递方法和系统 | |
CN107798754A (zh) | 充电设备的解锁方法、移动终端及充电设备 | |
CN105025157B (zh) | 一种私密联系人隐藏方法及用户终端 | |
CN203851154U (zh) | 信息化智能会议调度管理设备 | |
CN102053601A (zh) | Can控制器中实现多消息机制的方法 | |
CN106096958A (zh) | 一种ic卡与银行卡的解绑方法 | |
CN102833357A (zh) | 一种与第三方通信的接口平台 | |
CN108132767A (zh) | 应用窗口预览方法和系统 | |
CN106910000A (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 | ||
OL01 | Intention to license declared | ||
OL01 | Intention to license declared |