VxWorks多任务同步与通信方法

文档序号:6606217阅读:205来源:国知局
专利名称:VxWorks多任务同步与通信方法
技术领域
本发明涉及VxWorks操作系统技术领域,尤其涉及一种VxWorks多任务同步与通
信方法。
背景技术
VxWorks操作系统是一种嵌入式实时操作系统,允许多任务的同时运行。当多任务 同时运行时,任务之间的同步与通信是非常必要的。共享数据是VxWorks操作系统实现多任务同步与通信的途径之一。采用共享数据 时,通常采用VxWorks提供的信号量来保证共享数据的互斥访问,但当相互之间需要同步 与通信的任务比较多时,共享数据互斥访问的算法会很复杂,加大了多任务协作的难度。此外,VxWorks操作系统还提供了消息队列的方式来允许任务之间相互发送消息, 任何任务都可以发送消息到消息队列和从消息队列接收消息,来实现相互间的同步与通 信。但是,由于两个任务间全双工地通信一般需要两个消息队列,每个提供一个流通方向, 因此当相互之间需要同步与通信的任务比较多时,消息队列的数量会变得很大,对消息队 列的管理也会变得很复杂,加大了多任务协作的难度。

发明内容
有鉴于此,本发明提供一种VxWorks多任务同步与通信方法,以解决现有技术中, 当相互之间需要同步与通信的任务比较多时,由于共享数据互斥访问的算法很复杂或消息 队列的数量很大,所造成的多任务协作难度大的问题,技术方案如下一种VxWorks多任务同步与通信方法,包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。优选的,上述方法中,所述对多任务的操作包括任务创建、任务运行、任务暂停和任务销毁。优选的,上述方法中,所述创建MTLMutex对象对信号量进行封装包括在MTLMutex的构造函数中创建信号量,在MTLMutex的析构函数中删除信号量,在 MTLMutex的lock函数中获取信号量,在MTLMutex的unlock函数中释放信号量。优选的,上述方法中,所述创建MTLRecursiveMutex对象对信号量进行封装包括在 MTLRecursiveMutex 的构造函数中创建信号量,在 MTLRecursiveMutex 的析构函数中删除信号量,在MTLRecursiveMutex的lock函数中获取信号量,在 MTLRecursiveMutex的unlock函数中释放信号量。
优选的,上述方法中,所述创建MTLMonitor对象对消息队列进行封装包括在MTLMonitor的构造函数中创建消息队列,在MTLMonitor的析构函数中删除消 息队列,在MTLMonitor的wait函数中从消息队列获取消息,在MTLMonitor的notify函数 中向消息队列发送消息。优选的,上述方法中,所述创建MTLSynchronized对象对信号量和消息队列进行 统一管理,为用户提供统一的接口和用法包括在MTLSynchronized的构造函数中获取信号量和/或从消息队列中获取消 息,在MTLSynchronized的析构函数中释放信号量和/或向消息队列中发消息,在 MTLSynchronized的成员函数中实现对信号量或消息队列的其它操作。优选的,上述方法中,所述利用所述统一的接口和用法实现多任务的同步与通信 包括通过调用MTLMutex和MTLRecursiveMutex类的lock和unlock函数进行多任务 之间的同步;通过调用MTLMonitor类的wait和notify函数实现多任务之间的通信;通过定义MTLSynchronized类对象实现多任务的同步与通信。优选的,上述方法中,所述通过定义MTLSynchronized类对象实现多任务的同步 与通信包括MTLSynchronized的构造函数调用其成员变量MTLMonitor类对象的wait函数以 及MTLMutex和MTLRecursiveMutex类对象的lock函数,获取信号量或从消息队列中获取 消息;MTLSynchronized的析构函数中调用其成员变量MTLMonitor类对象的notify函 数以及MTLMutex和MTLRecursiveMutex类对象的unlock函数,释放信号量和向消息队列 发送消息;MTLSynchronized的成员函数实现对信号量和消息队列的其它操作。通过以上技术方案可知,本发明通过将VxWorks的信号量和消息队列封装成 多任务库,即创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法;从而使用户仅通过创建和使用C++对象的方 法即可对多任务进行同步和通信控制,大大降低了多任务协作的难度。


为了更清楚地说明本发明的技术方案,下面将对本发明描述中所需要使用的附图 作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普 通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的VxWorks多任务同步与通信方法流程图。
具体实施例方式本发明实施例针对现有技术存在的多任务协作的难度大的问题,提出了一种 多任务同步与通信方法,该方法包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和 MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装, 创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和 用法;利用所述统一的接口和用法实现多任务的同步与通信。本发明实施例提供的多任务同步与通信方法,利用C++类封装的方法对VxWorks 的消息队列和信号量进行封装,将消息队列和信号量与一定的数据结构相结合,使用户通 过定义C++类对象的方法来创建、使用和销毁消息队列与信号量,通过调用对象的方法来 与其它任务通信,从而轻松地实现多任务之间的同步和通信,大大降低了多任务协作的难度。为了使本领域技术人员更好的理解和实施本发明,下面将结合说明书附图对本发 明实施例的技术方案进行进一步详细阐述。参见图1所示,本发明实施例提供的VxWorks多任务同步与通信方法可以包括以 下步骤S101,创建MTLInitialize对象对多任务运行环境进行初始化。使用多任务库之前,必须创建MTLInitialize对象,对VxWorks操作系统的多任务 运行环境进行初始化。MTLInitialize类的构造函数会进行任务私有变量的分配、创建任务 管理类等初始化操作,通过创建MTLInitialize对象即可进行多任务运行环境的创建。S102,创建MTLThread对象将对多任务的操作进行封装。通过创建MTLThread对象可以实现对多任务的操作进行封装,对多任务的操作 包括任务创建、任务运行、任务暂停和任务销毁。其中,MTLThread类的构造函数会进行 VxWorks操作系统新任务的创建;通过从MTLThread类派生子类、再重载MTLThread类的 start等方法即可运行和控制新任务。S103,创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法。MTLMutex 和 MTLRecursiveMutex 类对 VxWorks 的信号量进行了封装,MTLMonitor 类对VxWorks的消息队列进行了封装,这三个类都是MTLSynchronized类的成员变量, MTLSynchronized类负责对信号量和消息队列进行统一管理,为用户提供统一的接口和用法。需要说明的是,所述创建MTLMutex对象对信号量进行封装包括在MTLMutex的构造函数中创建信号量,在MTLMutex的析构函数中删除信号量,在 MTLMutex的lock函数中获取信号量,在MTLMutex的unlock函数中释放信号量。所述创建MTLRecursiveMutex对象对信号量进行封装包括在 MTLRecursiveMutex 的构造函数中创建信号量,在 MTLRecursiveMutex 的析构函数中删除信号量,在MTLRecursiveMutex的lock函数中获取信号量,在 MTLRecursiveMutex的unlock函数中释放信号量。所述创建MTLMonitor对象对消息队列进行封装包括在MTLMonitor的构造函数中创建消息队列,在MTLMonitor的析构函数中删除消 息队列,在MTLMonitor的wait函数中从消息队列获取消息,在MTLMonitor的notify函数
6中向消息队列发送消息。 所述创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供 统一的接口和用法包括在MTLSynchronized的构造函数中获取信号量和/或从消息队列中获取消息,在 MTLSynchronized的析构函数中释放信号量和/或向消息队列中发消息,在MTLSynchronized的成员函数中实现对信号量或消息队列的其它操作。由于信号量可实现多任务之间的同步和对资源的互斥访问,消息队列可提供多任 务之间更高级别的通信与数据传送,因此这种统一封装的方式可实现绝大多数情况下的多 任务之间的同步与通信处理,且符合面向对象的封装思想。S104,利用所述统一的接口和用法实现多任务的同步与通信。在多任务库构造完成之后,用户就可以利用统一的接口和用法来实现多任务的同 步与通信。由于MTLMutex和MTLRecursiveMutex类对信号量进行了封装,用户通过调用其 lock和unlock等成员函数即可在多任务之间进行同步;MTLMonitor类对消息队列进行了 封装,用户通过调用其wait和notify等成员函数即可在多任务之间进行通信;此外,还通 过定义MTLSynchronized类对象实现多任务的同步与通信。其中,通过定义MTLSynchronized类对象实现多任务的同步与通信可以包括MTLSynchronized类的构造函数调用其成员变量MTLMonitor类对象的wait函数 以及MTLMutex和MTLRecursiveMutex类对象的lock函数,获取信号量或从消息队列中获 取消息;MTLSynchronized类的析构函数中调用其成员变量MTLMonitor类对象的notify 函数以及MTLMutex和MTLRecursiveMutex类对象的unlock函数,释放信号量和向消息队 列发送消息;MTLSynchronized的成员函数实现对信号量和消息队列的其它操作。从以上实施例可以看出,本发明通过将VxWorks的信号量和消息队列封装成 多任务库,即创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建 MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进 行统一管理,为用户提供统一的接口和用法;从而使用户仅通过创建和使用C++对象的方 法即可对多任务进行同步和通信控制,大大降低了多任务协作的难度。此外,本发明通过采用VxWorks多任务库,在保证功能实现的前提下,使得多任务 的同步和通信控制变得非常简单,大大提高了 VxWorks程序的健壮性,有利于缩短项目周 期,提高软件质量。通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可 借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者 是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡 献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包 括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执 行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括只读存储器 (ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新 颖特点相一 致的最宽的范围。
权利要求
一种VxWorks多任务同步与通信方法,其特征在于,包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。
2.根据权利要求1所述的方法,其特征在于,所述对多任务的操作包括任务创建、任务运行、任务暂停和任务销毁。
3.根据权利要求1所述的方法,其特征在于,所述创建MTLMutex对象对信号量进行封 装包括在MTLMutex的构造函数中创建信号量,在MTLMutex的析构函数中删除信号量,在 MTLMutex的lock函数中获取信号量,在MTLMutex的unlock函数中释放信号量。
4.根据权利要求1所述的方法,其特征在于,所述创建MTLRecursiveMutex对象对信号 量进行封装包括在MTLRecursiveMutex的构造函数中创建信号量,在MTLRecursiveMutex的析构函数 中删除信号量,在MTLRecursiveMutex的lock函数中获取信号量,在MTLRecursiveMutex 的unlock函数中释放信号量。
5.根据权利要求1所述的方法,其特征在于,所述创建MTLMonitor对象对消息队列进 行封装包括在MTLMonitor的构造函数中创建消息队列,在MTLMonitor的析构函数中删除消息队 列,在MTLMonitor的wait函数中从消息队列获取消息,在MTLMonitor的notify函数中向 消息队列发送消息。
6.根据权利要求1所述的方法,其特征在于,所述创建MTLSynchronized对象对信号量 和消息队列进行统一管理,为用户提供统一的接口和用法包括在MTLSynchronized的构造函数中获取信号量和/或从消息队列中获取消 息,在MTLSynchronized的析构函数中释放信号量和/或向消息队列中发消息,在 MTLSynchronized的成员函数中实现对信号量或消息队列的其它操作。
7.根据权利要求1所述的方法,其特征在于,所述利用所述统一的接口和用法实现多 任务的同步与通信包括通过调用MTLMutex和MTLRecursiveMutex类的lock和unlock函数进行多任务之间 的同步;通过调用MTLMonitor类的wait和notify函数实现多任务之间的通信;通过定义MTLSynchronized类对象实现多任务的同步与通信。
8.根据权利要求7所述的方法,其特征在于,所述通过定义MTLSynchronized类对象实 现多任务的同步与通信包括MTLSynchronized的构造函数调用其成员变量MTLMonitor类对象的wait函数以及 MTLMutex和MTLRecursiveMutex类对象的lock函数,获取信号量或从消息队列中获取消 息;MTLSynchronized的析构函数中调用其成员变量MTLMonitor类对象的notify函数以 及MTLMutex和MTLRecursiveMutex类对象的unlock函数,释放信号量和向消息队列发送 消息;MTLSynchronized的成员函数实现对信号量和消息队列的其它操作。
全文摘要
本发明公开了一种VxWorks多任务同步与通信方法,包括创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。本发明利用C++类封装的方法对VxWorks的消息队列和信号量进行封装,轻松地实现多任务之间的同步和通信,大大降低了多任务协作的难度。
文档编号G06F9/52GK101872317SQ201010230519
公开日2010年10月27日 申请日期2010年7月16日 优先权日2010年7月16日
发明者刘江宁, 王凯 申请人:山东中创软件工程股份有限公司;山东中创软件商用中间件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1