CN101872317B - VxWorks多任务同步与通信方法 - Google Patents

VxWorks多任务同步与通信方法 Download PDF

Info

Publication number
CN101872317B
CN101872317B CN 201010230519 CN201010230519A CN101872317B CN 101872317 B CN101872317 B CN 101872317B CN 201010230519 CN201010230519 CN 201010230519 CN 201010230519 A CN201010230519 A CN 201010230519A CN 101872317 B CN101872317 B CN 101872317B
Authority
CN
China
Prior art keywords
semaphore
function
message queue
multitask
mtlsynchronized
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
Application number
CN 201010230519
Other languages
English (en)
Other versions
CN101872317A (zh
Inventor
王凯
刘江宁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CVIC Software Engineering Co Ltd
Original Assignee
CVIC Software Engineering Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by CVIC Software Engineering Co Ltd filed Critical CVIC Software Engineering Co Ltd
Priority to CN 201010230519 priority Critical patent/CN101872317B/zh
Publication of CN101872317A publication Critical patent/CN101872317A/zh
Application granted granted Critical
Publication of CN101872317B publication Critical patent/CN101872317B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Mobile Radio Communication Systems (AREA)

Abstract

本发明公开了一种VxWorks多任务同步与通信方法,包括:创建MTLInitialize对象对多任务运行环境进行初始化;创建MTLThread对象将对多任务的操作进行封装;创建MTLMutex对象和MTLRecursiveMutex对象对信号量进行封装,创建MTLMonitor对象对消息队列进行封装,创建MTLSynchronized对象对信号量和消息队列进行统一管理,为用户提供统一的接口和用法;利用所述统一的接口和用法实现多任务的同步与通信。本发明利用C++类封装的方法对VxWorks的消息队列和信号量进行封装,轻松地实现多任务之间的同步和通信,大大降低了多任务协作的难度。

Description

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函数中向消息队列发送消息。
所述创建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)、磁碟或者光盘等各种可以存储程序代码的介质。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (1)

1.一种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的成员函数实现对信号量和消息队列的其它操作。
CN 201010230519 2010-07-16 2010-07-16 VxWorks多任务同步与通信方法 Active CN101872317B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010230519 CN101872317B (zh) 2010-07-16 2010-07-16 VxWorks多任务同步与通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010230519 CN101872317B (zh) 2010-07-16 2010-07-16 VxWorks多任务同步与通信方法

Publications (2)

Publication Number Publication Date
CN101872317A CN101872317A (zh) 2010-10-27
CN101872317B true CN101872317B (zh) 2012-12-26

Family

ID=42997187

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010230519 Active CN101872317B (zh) 2010-07-16 2010-07-16 VxWorks多任务同步与通信方法

Country Status (1)

Country Link
CN (1) CN101872317B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103634707A (zh) * 2012-08-23 2014-03-12 上海斐讯数据通信技术有限公司 通信方法
CN103019823B (zh) * 2012-12-12 2016-06-08 上海航天测控通信研究所 实现VxWorks与Qt通信的消息队列方法
CN105471718B (zh) * 2015-12-22 2018-10-19 积成电子股份有限公司 一种全双工消息队列的实现方法
CN109413064B (zh) * 2018-10-24 2021-04-27 同方电子科技有限公司 单网卡VxWorks系统与多主机间应用层协议报文处理方法
CN109634532B (zh) * 2018-12-19 2022-06-14 湖南源科创新科技有限公司 多VxWorks主机共享访问存储介质的方法
CN112559210B (zh) * 2020-12-16 2024-05-07 北京仿真中心 一种基于rtx实时系统的共享资源读写互斥方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1744046A (zh) * 2004-08-31 2006-03-08 华为技术有限公司 实时操作系统环境下多任务应用软件模块的管理方法
WO2007051935A1 (fr) * 2005-11-04 2007-05-10 Commissariat A L'energie Atomique Procede et systeme de calcul intensif multitache et multiflot en temps reel
CN101609417A (zh) * 2009-07-17 2009-12-23 西安电子科技大学 基于VxWorks操作系统的混合任务集调度方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1744046A (zh) * 2004-08-31 2006-03-08 华为技术有限公司 实时操作系统环境下多任务应用软件模块的管理方法
WO2007051935A1 (fr) * 2005-11-04 2007-05-10 Commissariat A L'energie Atomique Procede et systeme de calcul intensif multitache et multiflot en temps reel
CN101609417A (zh) * 2009-07-17 2009-12-23 西安电子科技大学 基于VxWorks操作系统的混合任务集调度方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
曹庆年 张金森 孟开元.VxWorks多任务调度策略的研究.《中国科技信息》.2008,(第8期),全文. *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统
CN106980544B (zh) * 2017-03-31 2020-03-03 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统

Also Published As

Publication number Publication date
CN101872317A (zh) 2010-10-27

Similar Documents

Publication Publication Date Title
CN101872317B (zh) VxWorks多任务同步与通信方法
US20190317825A1 (en) System for managing deployment of distributed computing resources
CN102843393B (zh) 网络应用的运行装置及方法
CN102790776B (zh) 心跳连接归一处理方法、终端、服务器及通信系统
CN108737092B (zh) 移动终端管理服务器、移动终端、业务云平台和应用系统
WO2014194856A1 (zh) 一种基于Android智能移动终端的通信密钥分配方法
CN105335229A (zh) 一种业务资源的调度方法和装置
US9456017B2 (en) System and method for a connector being able to adapt to newer features introduced to a messaging provider with only configuration changes
CN108021400B (zh) 数据处理方法及装置、计算机存储介质及设备
CN103634339A (zh) 虚拟加密机装置、金融加密机及加密报文的方法
CN102045189B (zh) 网络管理系统及其方法
CN102917052A (zh) 一种云计算系统中资源分配的方法
Ning et al. Mobile storm: Distributed real-time stream processing for mobile clouds
CN107070862B (zh) 网关的数据分流方法、数据分流装置以及网关系统
CN103036917B (zh) 客户端平台的实现方法及客户端平台
CN103150154A (zh) 一种应用程序插件的实现方法及装置
CN109002363A (zh) 一种事件处理方法、装置、设备及可读存储介质
EP3975028A1 (en) One-touch inline cryptographic data processing
EP3026869B1 (en) Method, device and system for carrying out telecommunication capability group sending
CN104571930B (zh) 一种安全域存储空间的管理方法、系统和多应用开放平台装置
CN106126351A (zh) 一种基于消息队列的数据资源共享管理系统
CN111790159A (zh) 数据处理的方法、装置、设备及计算机可读存储介质
CN106161652A (zh) 基于Zstack请求的私有云平台及其调度方法
CN103677975A (zh) 一种访问应用系统内部对象的系统和方法
CN105262604A (zh) 虚拟机迁移方法及设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Free format text: FORMER OWNER: CVIC SOFTWARE ENGINEERING CO., LTD.

Effective date: 20131227

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20131227

Address after: 250014 Shandong city of Ji'nan Province - Shandong Lixia District Road No. 41-1

Patentee after: CVIC Software Engineering Co., Ltd.

Address before: 250014 No. 41-1 Shandong Road, Shandong, Ji'nan

Patentee before: Shandong CVIC Software Engineering Co., Ltd.

Patentee before: CVIC Software Engineering Co., Ltd.