一种基于多平台的自动互斥量运行方法

文档序号:6601299阅读:163来源:国知局
专利名称:一种基于多平台的自动互斥量运行方法
技术领域
本发明多线程的软件开发中多线程资源共享的互斥操作方法,具体涉及一种基于 多平台的自动互斥量运行方法。
背景技术
在多线程的软件开发中,会使用到大量的线程共享资源,而对这些资源的访问需 要对其进行加锁操作,也就是互斥操作。这就造成需要在代码内使用比较多的互斥量,而互 斥量的使用过程中,又由于程序的条件判引起的多出口的问题,造成很容易程序出口处遗 漏掉释放互斥量的操作,这种遗漏是比较致命的,若是大型的多线程服务器程序,遗漏之处 比较隐秘,会造成程序运行中的死锁情况,而要排除此问题,将会耗费系统工程师大量的精 力去进行排除。在软件开发中,特别是多线程服务器软件的开发中需要大量使用到原子操作,原 子操作的实现主要是依靠互斥量,信号量等内核对象的操作。而在不同平台的软件环境下 的内核对象的操作也不相同。由于代码的特性,原子操作的入口点只有一个,而出口点会由条件判断的原因,会 有多个,在实际实现中,经常会有遗漏一个出口点,其所占用的互斥量没有被正确释放,造 成互斥量的死锁,引起软件运行故障。

发明内容
本发明要解决的技术问题是在多线程的软件开发中,会使用到大量的线程共享资 源,而对这些资源的访问需要对其进行加锁操作,也就是互斥操作让系统工程只需关注需 要进入互斥量的区间,而不必关心由条件判断引起的多出口的问题。为解决以上技术问题,本发明提供一种基于多平台的自动互斥量运行方法,利用 C++对象的创建和销毁会调用构造函数和析构函数的特性,将进入互斥量的操作放在构造 函数里,将退出互斥量的操作放在析构函数里,这样在创建自动互斥对象的时候会进行进 锁操作,而在销毁自动互斥对象的时候会进行解锁操作。优选地,具体步骤为首先对系统平台进行互斥量封装,这个封装对象为 CcoreMutex,并实现lock和unlock的功能接口,Lock为获得进入互斥量的接口,unlock 为释放互斥量的接口,再实现一个CAutoCoreMutex的自动互斥量,构造参数中传入 CcoreMutex的指针,检查指针有效性后进行lock操作,析构函数中对该指针进行unlock操作。优选地,自动互斥量对象的构造函数中进行进入互斥量操作,在析构中进行退出 互斥量操作,再利用临时变量的生存期,在一段要使用原子操作的代码开始处申明一个自 动互斥对象后,这样在自动互斥对象的生存期到达后,该对象会被销毁,从而调用析构里释 放互斥对象的操作。优选地,首先分别对UINX系统,以及WIN32系统平台进行互斥量的封装。
优选地,由宏来区分UINX系统以及WIN32项操作系统平台。该发明可以有效地解决释放互斥量的多出口点问题。减少原子操作的实现步骤, 弱化原子操作实现的平台相关性。具体功能是自动对所要进行的代码区进行互斥操作,并 能够在代码区结束后,进行自动释放。



无附图。
具体实施例方式本发明方法针对该技术的多平台特性,所以,首先分别对UINX系统,以及WIN32 系统进行互斥量的封装。假定这个封装对象为CcoreMutex。并实现lock和unlock的 功能接口。Lock为获得进入互斥量的接口,unlock为释放互斥量的接口,再实现一个 CAutoCoreMutex的自动互斥量,构造参数中传入CcoreMutex的指针,检查指针有效性后进 行lock操作,析构函数中对该指针进行unlock操作。由Win32和Linux分别进行互斥量 的封装,由宏来区分各项操作系统平台。在自动互斥量对象的构造函数中进行进入互斥量操作,在析构中进行退出互斥量 操作。再利用临时变量的生存期,在一段要使用原子操作的代码开始处申明一个自动互斥 对象后,这样在自动互斥对象的生存期到达后,该对象会被销毁,从而调用析构里释放互斥 对象的操作。使用方式如下代码示例//定义一个互斥量对象。CcoreMutex mutex ;{//构造自动互斥量对象,对自动进行锁操作CautoCoreMutex autolock (&mutex);需要进行原子操作的代码区}//前面定义的自动互斥量的生存期到达,系统会对autolock进行销毁,会调用析构函数,所以unlock会被执行。本方法可以有效提高代码的平台无关性。提高代码的安全性。使开发人员只需要 产生一个自动互斥对象,即可对该代码区内的代码进行原子操作,而不需要进行释放动作。 释放动作由该自动互斥对象被销毁的时候会自动执行。减少冗余代码。减少由于开发人员 的疏忽造成的系统灾难性错误的几率。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
一种基于多平台的自动互斥量运行方法,其特征在于利用C++对象的创建和销毁会调用构造函数和析构函数的特性,将进入互斥量的操作放在构造函数里,将退出互斥量的操作放在析构函数里,这样在创建自动互斥对象的时候会进行进锁操作,而在销毁自动互斥对象的时候会进行解锁操作。
2.如权利要求1所述的基于多平台的自动互斥量运行方法,其特征在于具体步骤 为首先对系统平台进行互斥量封装,这个封装对象为CcoreMutex,并实现lock和unlock 的功能接口,Lock为获得进入互斥量的接口,unlock为释放互斥量的接口,再实现一个 CAutoCoreMutex的自动互斥量,构造参数中传入CcoreMutex的指针,检查指针有效性后进 行lock操作,析构函数中对该指针进行unlock操作。
3.如权利要求2所述的基于多平台的自动互斥量运行方法,其特征在于自动互斥量 对象的构造函数中进行进入互斥量操作,在析构中进行退出互斥量操作,再利用临时变量 的生存期,在一段要使用原子操作的代码开始处申明一个自动互斥对象后,这样在自动互 斥对象的生存期到达后,该对象会被销毁,从而调用析构里释放互斥对象的操作。
4.如权利要求2所述的基于多平台的自动互斥量运行方法,其特征在于首先分别对 UINX系统,以及WIN32系统平台进行互斥量的封装。
5.如权利要求4所述的基于多平台的自动互斥量运行方法,其特征在于由宏来区分 UINX系统以及WIN32操作系统平台。
全文摘要
本发明涉及一种基于多平台的自动互斥量运行方法。本发明涉及一种利用C++对象的创建和销毁会调用构造函数和析构函数的特性,将进入互斥量的操作放在构造函数里,将退出互斥量的操作放在析构函数里,这样在创建自动互斥对象的时候会进行进锁操作,而在销毁自动互斥对象的时候会进行解锁操作。本发明可以有效地解决释放互斥量的多出口点问题。减少原子操作的实现步骤,弱化原子操作实现的平台相关性。
文档编号G06F9/46GK101840351SQ20101015601
公开日2010年9月22日 申请日期2010年4月20日 优先权日2010年4月20日
发明者蒋宏敏 申请人:深圳市融创天下科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1