




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VxWorks及其应用开发陈香兰xlanchen@/~xlanchen2006年7月1VxWorks及其应用开发陈香兰1课程内容VxWorks和Tornado简介任务和任务间通信信号、中断处理与定时机制调试环境与实例分析网络编程VxWorks操作系统配置2课程内容VxWorks和Tornado简介2任务间通信(cont’d)xlanchen@2006.7.183任务间通信(cont’d)xlanchen@2006.7.14、信号量信号量是提供任务间通信、同步和互斥的最优选择将对共享资源的访问上锁,比中断上锁、抢占上锁的粒度细三种类型的信号量:二进制信号量:用于同步或互斥互斥信号量:特殊的二进制信号量资源信号量:资源计数器,随着资源的分配和释放而变化44、信号量信号量是提供任务间通信、同步和互斥的最优选择44.1、信号量控制接口无论是上述哪一种信号量,Wind提供一套单一的接口用于控制信号量返回信号量的ID号,为随后的信号量控制函数提供句柄信号量的类型由创建函数确定,其他接口根据信号量的类型进行相应的操作控制信号量的函数54.1、信号量控制接口无论是上述哪一种信号量,Wind提供一semGive()、semFlush()、semDelete()的参数都是semID,表示要操作的信号量但semTake()多了一个超时参数要申请的信号量等待信号量的最长时间0:不等待6semGive()、semFlush()、semDelete4.2、二进制信号量二进制信号量用于互斥和同步二进制信号量对应的资源只有两个状态可用或不可用(二进制的来由)使用semBCreate创建options指明等待队列的
风格:
基于优先级还是FIFO指明二进制信号量的初始状态:相应资源是否可用74.2、二进制信号量二进制信号量用于互斥和同步optionssemTake()用于取一个信号量,其结果取决于相应资源是否可用8semTake()用于取一个信号量,其结果取决于相应资源是否semGive()释放一个信号量,其结果也依赖信号量的状态9semGive()释放一个信号量,其结果也依赖信号量的状态94.3使用二进制信号量互斥当两个或多个任务共享使用同一块内存缓冲或者同一个I/O设备资源时,可能会发生竞争状态例如:5个任务共享一个缓冲来处理气象信息,任务A~D向缓冲写数据,任务E从缓冲读数据104.3使用二进制信号量互斥当两个或多个任务共享使用同一块内假如5个任务运行在相同的优先级,并且使用轮转调度时刻1:任务B正在修改Weather_up,已经修改了状态,还没有修改时间。此时时间片结束,任务E被调度运行。时刻2:任务E运行,并读取Weather_up,此时状态与时间不一致,导致数据失去意义使用二进制信号量可以避免这种情况11假如5个任务运行在相同的优先级,并且使用轮转调度时刻1:任务使用二进制信号量互斥二进制信号量通过对共享资源上锁,实现高效的互斥访问使用这种技术时,创建的二进制信号量的初始值为信号量可用12使用二进制信号量互斥二进制信号量通过对共享资源上锁,实现高效当任务需要访问共享资源时,必须使用semTake()获取信号量当任务持有这个信号量时,所有其他想要访问这个资源的任务将被阻塞因此,任务完成对资源的访问后,应当释放信号量,允许其他任务使用这个资源一个典型的互斥访问资源的程序:13当任务需要访问共享资源时,必须使用semTake()获取信号14144.4使用二进制信号量同步用作任务同步时,信号量可看成是任务等待的一个状态或事件初始信号量:不可用由一个任务或中断处理程序来释放一个信号量,从而通知事件的发生其他任务调用semTake()时会阻塞以等待事件的发生154.4使用二进制信号量同步用作任务同步时,信号量可看成是任举例下面的例子使用信号量实现任务同步包括3个子程序:Init、Task1以及一个ISR16举例下面的例子使用信号量实现任务同步16Initinit()创建一个二进制信号量,将一个事件与一个ISR相连接然后发起一个任务处理这个事件intConnect将一个C程序eventInterruptSvcRout与一个中断连接起来创建一个二进制信号量,初始化为空创建一个进行同步的任务17Initinit()创建一个二进制信号量,将一个事件与一个Itask1Task1一直运行到semTake(),在这个点上,它将一直阻塞,直到一个事件发生引起ISR调用semGive()运行请求同步:等待事件的发生18task1Task1一直运行到semTake(),在这个点上在中断处理中释放信号量,引发task1要处理的事件当ISR完成task1将恢复执行处理这个事件由于eventInterruptSvcRout在Init中被连接到一个中断上,当中断发生的时候,这个函数就会被运行释放同步信号量19在中断处理中释放信号量,引发task1要处理的事件由于eve注意使用二进制信号量实现互斥与同步差别信号量的初始化状态不同互斥:资源一开始是可用的同步:资源一开始是不可用的(事件还没有发生)使用模式也不同互斥:任务必须先取得信号量,而后释放同步:某些任务中取得信号量,另外一些任务释放信号量(当事件发生时)20注意使用二进制信号量实现互斥与同步差别204.5互斥信号量互斥信号量是一种特殊的二进制信号量,主要用于解决具有内在的互斥问题:优先级继承、删除安全、对资源的递归访问等等互斥信号量的基本行为与二进制信号量一致,不同之处在于:它仅能用于互斥仅能由执行semTake()的任务释放、不能在ISR中释放semFlush()操作非法214.5互斥信号量互斥信号量是一种特殊的二进制信号量,主要用使用semMCreate()创建互斥信号量Options指明信号量的属性,除了SEM_Q_PRIORITY、SEM_Q_FIFO外,还可以是:SEM_DELETE_SAFE、SEM_INVERSION_SAFE、SEM_EVENTSEND_ERR_NOTIFY22使用semMCreate()创建互斥信号量Options指明优先级倒转优先级倒转发生在一个高优先级的任务被迫等待一段不确定的时间,等待一个低优先级任务完成例如23优先级倒转优先级倒转发生在一个高优先级的任务被迫等待一段不确优先级倒转现象24优先级倒转现象24VxWorks允许使用优先级继承算法,可以保证系统的可预测性互斥信号量的SEM_INVERSION_SAFE选项指明使用优先级继承算法优先级继承算法:假设一个低优先级的任务1拥有互斥资源若有一个高优先级的任务2希望获得该资源,但由于资源被其他任务占用,任务2被阻塞,任务1继承任务2的优先级在高优先级上运行25VxWorks允许使用优先级继承算法,可以保证系统的可预测性若又有一个更高优先级的任务3希望获得这个资源,同样的,任务3被阻塞,任务1继承任务3的优先级在更高优先级上运行……(任务1总是继承被阻塞任务中的最高优先级)当任务1最终释放互斥资源时,唤醒等待队列上的第一个任务
(优先级继承选项必须与SEM_Q_PRIORITY一齐使用)26若又有一个更高优先级的任务3希望获得这个资源,同样的,任务3使用优先级继承解决优先级倒转问题27使用优先级继承解决优先级倒转问题27举例,优先级倒转28举例,优先级倒转282929303031313232编译运行inversion上机作业,将上述程序修改,以解决优先级倒转问题33编译33删除安全互斥的另一个问题涉及到任务删除在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外的删除可能造成保护资源的信号量不可用可能导致资源处于破坏状态使得其他需要访问该资源的任务无法得到满足34删除安全互斥的另一个问题涉及到任务删除34SEM_DELETE_SAFE选项互斥信号量的SEM_DELETE_SAFE选项用来避免处于临界区的任务被意外删除semTake隐含使用taskSafesemGive隐含使用taskUnsafe35SEM_DELETE_SAFE选项互斥信号量的SEM_DEL递归资源访问互斥信号量能够被递归的获取一个任务可以多次获取从一个互斥信号量在真正释放一个互斥信号量之前,一个递归获取了n次的互斥信号量,必须被释放n次系统使用一个计数器跟踪信号量的递归获取次数每次semTake时计数器加1每次semGive时,计数器减136递归资源访问互斥信号量能够被递归的获取36例如37例如3738384.6资源信号量(计数器信号量)资源信号量是实现任务同步和互斥的另一种手段资源信号量跟踪可用资源的个数(在二进制信号量中,资源的状态只能有两个可用/不可用)当可用资源的个数为0时,调用semTake()的任务将会被阻塞394.6资源信号量(计数器信号量)资源信号量是实现任务同步和举例40举例404.7POSIX信号量POSIX定义了命名和未命名两种信号量414.7POSIX信号量POSIX定义了命名和未命名两种信号4.9信号量在多任务中的应用互斥信号量用于任务同步两个任务:生产者和消费者生产者,生产信息并写入共享数据结构消费者,从共享数据结构中读取消费信息程序首先创建一个互斥信号量用于保护共享数据结构,然后创建生产者和消费者424.9信号量在多任务中的应用互斥信号量用于任务同步424343……44……44……45……454646//第一个任务创建并初始化信号量、创建生产者和消费者任务、等待所有任务的结束并最终删除信号量47//第一个任务创建并初始化信号量、创建生产者和消费者任务、4//如果已经有5个信息,就停止运行48//如果已经有5个信息,就停止运行484949//当信息处理完,所有任务都该结束//判断是否是最后一个信息50//当信息处理完,所有任务都该结束//判断是否是最后一个5151作为上机作业,使用命令:52525消息队列VxWorks中,单CPU任务间主要的通信机制是消息队列消息队列允许长度可变、数目可变的消息排队任何任务或ISR可以发送消息到消息队列任何任务可以从消息队列接收消息多个任务可以向同一个消息队列发送/接收消息535消息队列VxWorks中,单CPU任务间主要的通信机制是两个任务间全双工的通信一般需要两个消息队列54两个任务间全双工的通信一般需要两个消息队列54VxWorks提供两个消息队列函数库msgQLib,提供wind消息队列,专门为VxWorks设计mqPxLib,与POSIX实时扩展标准兼容55VxWorks提供两个消息队列函数库555.2Wind消息队列msgQLib提供消息队列函数但也提供了两个优先级,高优先级的消息将放在队列头部565.2Wind消息队列msgQLib提供消息队列函数56消息队列的最大长度消息的最大长度消息队列的其他属性:MSG_Q_FIFOMSG_Q_PRIORITYMSG_Q_EVENTSEND_ERR_NOTIFY57消息队列的最大长度消息的最大长度消息队列的其他属性:57指明目标消息队列消息字符串消息长度超时限制消息优先级:MSG_PRI_NORMALMSG_PRI_URGENTmsgQSend:当有任务正在等待某个消息的到来,则被发送的消息立即提交给第一个等待的任务;否则,消息插入消息队列当消息队列满时,任务被阻塞58指明目标消息队列消息字符串消息长度超时限制消息优先级:msg指明目标消息队列用于接收消息的缓冲区缓冲区长度超时限制msgQReceive:当有消息在消息队列上时,第一个消息被接收;否则,调用者被阻塞,进入目标消息队列的任务队列排队(基于优先级/FIFO)59指明目标消息队列用于接收消息的缓冲区缓冲区长度超时限制msg关于超时对于msgQSend,当消息队列满的时候,发送者被阻塞,等待的最长时间为timeout个tickmsgQReceive,当消息队列为空的时候,接受者被阻塞,等待的最长时间为timeout个tick若timeout=NO_WAIT,则不等待,立即返回=WAIT_FOREVER,则将一直等下去,直到队列为非满(对于发送)或非空(对于接收)60关于超时对于60关于消息的优先级消息分为Normal和Urgent两种MSG_PRI_NORMAL,消息添加到消息队列的末尾,正常情况MSG_PRI_URGENT,消息添加到消息队列的头部61关于消息的优先级消息分为Normal和Urgent两种61例如:下面的例子采用消息队列进行通信例子创建两个任务:生产者向消息队列发送消息消费者从消息队列获取消息62例如:下面的例子采用消息队列进行通信62636364646565//msgQDemo负责创建消息队列,创建生产者和消费者,当生产者和消费者结束后,删除消息队列66//msgQDemo负责创建消息队列,创建生产者和消费者,6767作为上机作业,命令:68作为上机作业,命令:685.3POSIX消息队列除了POSIX消息队列提供命名队列和消息具有一定范围的优先级之外,这些函数相似于Wind的消息队列695.3POSIX消息队列除了POSIX消息队列提供命名队列5.4显示消息队列的属性使用VxWorks提供的show命令可以显示消息队列的属性mqID指明消息队列705.4显示消息队列的属性使用VxWorks提供的show命5.5使用消息队列的服务器和客户实时系统经常按照C/S(客户/服务器)模型编写程序服务器任务接收来自客户任务的请求,执行一些服务,然后返回一个应答VxWorks中,使用消息队列或管道可以比较自然的实现C/S模式715.5使用消息队列的服务器和客户实时系统经常按照C/S(客C/S通信模式使用消息队列实现C/S通信72C/S通信模式使用消息队列实现C/S通信726.1管道管道使用VxWorksI/O系统,能够提供与消息队列相似的功能,是一种由pipeDrv驱动程序管理的虚拟I/O设备pipeDevCreate()创建一个管道设备以及与该管道相联系的底层消息队列管道的名字能够排队的消息的最大数目每个消息的最大长度736.1管道管道使用VxWorksI/O系统,能够提供与消对于创建好的管道,任务能够使用标准I/O程序打开、读/写、控制管道当任务试图向一个已满的管道执行写操作,这个任务将挂起若任务试图向一个空的管道执行读操作,任务也将挂起,直到有消息到达使用管道也能实现C/S模式通信74对于创建好的管道,任务能够使用标准I/O程序打开、读/写、控管道用于任务间通信例子:serverStartserverSendpipeServer75管道用于任务间通信例子:757676serverStart创建一个管道,打开一个管道获得其描述符pipeFd,并创建一个pipeServer任务77serverStart创建一个管道,打开一个管道获得77serverSend将一个请求消息发送到管道中,这个消息指定一个要执行的例程及参数78serverSend将一个请求消息发送到管道中,这个78如何让这个例子run起来?命令:pipeServer总是从管道中读取请求,并执行请求中指定的例程79如何让这个例子run起来?pipeServer总是从管道中读VxWorks及其应用开发陈香兰xlanchen@/~xlanchen2006年7月80VxWorks及其应用开发陈香兰1课程内容VxWorks和Tornado简介任务和任务间通信信号、中断处理与定时机制调试环境与实例分析网络编程VxWorks操作系统配置81课程内容VxWorks和Tornado简介2任务间通信(cont’d)xlanchen@2006.7.1882任务间通信(cont’d)xlanchen@2006.7.14、信号量信号量是提供任务间通信、同步和互斥的最优选择将对共享资源的访问上锁,比中断上锁、抢占上锁的粒度细三种类型的信号量:二进制信号量:用于同步或互斥互斥信号量:特殊的二进制信号量资源信号量:资源计数器,随着资源的分配和释放而变化834、信号量信号量是提供任务间通信、同步和互斥的最优选择44.1、信号量控制接口无论是上述哪一种信号量,Wind提供一套单一的接口用于控制信号量返回信号量的ID号,为随后的信号量控制函数提供句柄信号量的类型由创建函数确定,其他接口根据信号量的类型进行相应的操作控制信号量的函数844.1、信号量控制接口无论是上述哪一种信号量,Wind提供一semGive()、semFlush()、semDelete()的参数都是semID,表示要操作的信号量但semTake()多了一个超时参数要申请的信号量等待信号量的最长时间0:不等待85semGive()、semFlush()、semDelete4.2、二进制信号量二进制信号量用于互斥和同步二进制信号量对应的资源只有两个状态可用或不可用(二进制的来由)使用semBCreate创建options指明等待队列的
风格:
基于优先级还是FIFO指明二进制信号量的初始状态:相应资源是否可用864.2、二进制信号量二进制信号量用于互斥和同步optionssemTake()用于取一个信号量,其结果取决于相应资源是否可用87semTake()用于取一个信号量,其结果取决于相应资源是否semGive()释放一个信号量,其结果也依赖信号量的状态88semGive()释放一个信号量,其结果也依赖信号量的状态94.3使用二进制信号量互斥当两个或多个任务共享使用同一块内存缓冲或者同一个I/O设备资源时,可能会发生竞争状态例如:5个任务共享一个缓冲来处理气象信息,任务A~D向缓冲写数据,任务E从缓冲读数据894.3使用二进制信号量互斥当两个或多个任务共享使用同一块内假如5个任务运行在相同的优先级,并且使用轮转调度时刻1:任务B正在修改Weather_up,已经修改了状态,还没有修改时间。此时时间片结束,任务E被调度运行。时刻2:任务E运行,并读取Weather_up,此时状态与时间不一致,导致数据失去意义使用二进制信号量可以避免这种情况90假如5个任务运行在相同的优先级,并且使用轮转调度时刻1:任务使用二进制信号量互斥二进制信号量通过对共享资源上锁,实现高效的互斥访问使用这种技术时,创建的二进制信号量的初始值为信号量可用91使用二进制信号量互斥二进制信号量通过对共享资源上锁,实现高效当任务需要访问共享资源时,必须使用semTake()获取信号量当任务持有这个信号量时,所有其他想要访问这个资源的任务将被阻塞因此,任务完成对资源的访问后,应当释放信号量,允许其他任务使用这个资源一个典型的互斥访问资源的程序:92当任务需要访问共享资源时,必须使用semTake()获取信号93144.4使用二进制信号量同步用作任务同步时,信号量可看成是任务等待的一个状态或事件初始信号量:不可用由一个任务或中断处理程序来释放一个信号量,从而通知事件的发生其他任务调用semTake()时会阻塞以等待事件的发生944.4使用二进制信号量同步用作任务同步时,信号量可看成是任举例下面的例子使用信号量实现任务同步包括3个子程序:Init、Task1以及一个ISR95举例下面的例子使用信号量实现任务同步16Initinit()创建一个二进制信号量,将一个事件与一个ISR相连接然后发起一个任务处理这个事件intConnect将一个C程序eventInterruptSvcRout与一个中断连接起来创建一个二进制信号量,初始化为空创建一个进行同步的任务96Initinit()创建一个二进制信号量,将一个事件与一个Itask1Task1一直运行到semTake(),在这个点上,它将一直阻塞,直到一个事件发生引起ISR调用semGive()运行请求同步:等待事件的发生97task1Task1一直运行到semTake(),在这个点上在中断处理中释放信号量,引发task1要处理的事件当ISR完成task1将恢复执行处理这个事件由于eventInterruptSvcRout在Init中被连接到一个中断上,当中断发生的时候,这个函数就会被运行释放同步信号量98在中断处理中释放信号量,引发task1要处理的事件由于eve注意使用二进制信号量实现互斥与同步差别信号量的初始化状态不同互斥:资源一开始是可用的同步:资源一开始是不可用的(事件还没有发生)使用模式也不同互斥:任务必须先取得信号量,而后释放同步:某些任务中取得信号量,另外一些任务释放信号量(当事件发生时)99注意使用二进制信号量实现互斥与同步差别204.5互斥信号量互斥信号量是一种特殊的二进制信号量,主要用于解决具有内在的互斥问题:优先级继承、删除安全、对资源的递归访问等等互斥信号量的基本行为与二进制信号量一致,不同之处在于:它仅能用于互斥仅能由执行semTake()的任务释放、不能在ISR中释放semFlush()操作非法1004.5互斥信号量互斥信号量是一种特殊的二进制信号量,主要用使用semMCreate()创建互斥信号量Options指明信号量的属性,除了SEM_Q_PRIORITY、SEM_Q_FIFO外,还可以是:SEM_DELETE_SAFE、SEM_INVERSION_SAFE、SEM_EVENTSEND_ERR_NOTIFY101使用semMCreate()创建互斥信号量Options指明优先级倒转优先级倒转发生在一个高优先级的任务被迫等待一段不确定的时间,等待一个低优先级任务完成例如102优先级倒转优先级倒转发生在一个高优先级的任务被迫等待一段不确优先级倒转现象103优先级倒转现象24VxWorks允许使用优先级继承算法,可以保证系统的可预测性互斥信号量的SEM_INVERSION_SAFE选项指明使用优先级继承算法优先级继承算法:假设一个低优先级的任务1拥有互斥资源若有一个高优先级的任务2希望获得该资源,但由于资源被其他任务占用,任务2被阻塞,任务1继承任务2的优先级在高优先级上运行104VxWorks允许使用优先级继承算法,可以保证系统的可预测性若又有一个更高优先级的任务3希望获得这个资源,同样的,任务3被阻塞,任务1继承任务3的优先级在更高优先级上运行……(任务1总是继承被阻塞任务中的最高优先级)当任务1最终释放互斥资源时,唤醒等待队列上的第一个任务
(优先级继承选项必须与SEM_Q_PRIORITY一齐使用)105若又有一个更高优先级的任务3希望获得这个资源,同样的,任务3使用优先级继承解决优先级倒转问题106使用优先级继承解决优先级倒转问题27举例,优先级倒转107举例,优先级倒转2810829109301103111132编译运行inversion上机作业,将上述程序修改,以解决优先级倒转问题112编译33删除安全互斥的另一个问题涉及到任务删除在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外的删除可能造成保护资源的信号量不可用可能导致资源处于破坏状态使得其他需要访问该资源的任务无法得到满足113删除安全互斥的另一个问题涉及到任务删除34SEM_DELETE_SAFE选项互斥信号量的SEM_DELETE_SAFE选项用来避免处于临界区的任务被意外删除semTake隐含使用taskSafesemGive隐含使用taskUnsafe114SEM_DELETE_SAFE选项互斥信号量的SEM_DEL递归资源访问互斥信号量能够被递归的获取一个任务可以多次获取从一个互斥信号量在真正释放一个互斥信号量之前,一个递归获取了n次的互斥信号量,必须被释放n次系统使用一个计数器跟踪信号量的递归获取次数每次semTake时计数器加1每次semGive时,计数器减1115递归资源访问互斥信号量能够被递归的获取36例如116例如37117384.6资源信号量(计数器信号量)资源信号量是实现任务同步和互斥的另一种手段资源信号量跟踪可用资源的个数(在二进制信号量中,资源的状态只能有两个可用/不可用)当可用资源的个数为0时,调用semTake()的任务将会被阻塞1184.6资源信号量(计数器信号量)资源信号量是实现任务同步和举例119举例404.7POSIX信号量POSIX定义了命名和未命名两种信号量1204.7POSIX信号量POSIX定义了命名和未命名两种信号4.9信号量在多任务中的应用互斥信号量用于任务同步两个任务:生产者和消费者生产者,生产信息并写入共享数据结构消费者,从共享数据结构中读取消费信息程序首先创建一个互斥信号量用于保护共享数据结构,然后创建生产者和消费者1214.9信号量在多任务中的应用互斥信号量用于任务同步4212243……123……44……124……4512546//第一个任务创建并初始化信号量、创建生产者和消费者任务、等待所有任务的结束并最终删除信号量126//第一个任务创建并初始化信号量、创建生产者和消费者任务、4//如果已经有5个信息,就停止运行127//如果已经有5个信息,就停止运行4812849//当信息处理完,所有任务都该结束//判断是否是最后一个信息129//当信息处理完,所有任务都该结束//判断是否是最后一个13051作为上机作业,使用命令:131525消息队列VxWorks中,单CPU任务间主要的通信机制是消息队列消息队列允许长度可变、数目可变的消息排队任何任务或ISR可以发送消息到消息队列任何任务可以从消息队列接收消息多个任务可以向同一个消息队列发送/接收消息1325消息队列VxWorks中,单CPU任务间主要的通信机制是两个任务间全双工的通信一般需要两个消息队列133两个任务间全双工的通信一般需要两个消息队列54VxWorks提供两个消息队列函数库msgQLib,提供wind消息队列,专门为VxWorks设计mqPxLib,与POSIX实时扩展标准兼容134VxWorks提供两个消息队列函数库555.2Wind消息队列msgQLib提供消息队列函数但也提供了两个优先级,高优先级的消息将放在队列头部1355.2Wind消息队列msgQLib提供消息队列函数56消息队列的最大长度消息的最大长度消息队列的其他属性:MSG_Q_FIFOMSG_Q_PRIORITYMSG_Q_EVENTSEND_ERR_NOTIFY136消息队列的最大长度消息的最大长度消息队列的其他属性:57指明目标消息队列消息字符串消息长度超时限制消息优先级:MSG_PRI_NORMALMSG_PRI_URGENTmsgQSend:当有任务正在等待某个消息的到来,则被发送的消息立即提交给第一个等待的任务;否则,消息插入消息队列当消息队列满时,任务被阻塞137指明目标消息队列消息字符串消息长度超时限制消息优先级:msg指明目标消息队列用于接收消息的缓冲区缓冲区长度超时限制msgQReceive:当有消息在消息队列上时,第一个消息被接收;否则,调用者被阻塞,进入目标消息队列的任务队列排队(基于优先级/FIFO)138指明目标消息队列用于接收消息的缓冲区缓冲区长度超时限制msg关于超时对于msgQSend,当消息队列满的时候,发送者被阻塞,等待的最长时间为timeout个tickmsgQReceive,当消息队列为空的时候,接受者被阻塞,等待的最长时间为timeout个tick若timeout=NO_WAIT,则不等待,立即返回=WAIT_FOREVER,则将一直等下去,直到队列为非满(对于发送)或非空(对于接收)139关于超时对于60关于消息的优先级消息分为Norma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳八上数学期中试卷及答案
- 商都二中考试卷及答案
- 肇庆市实验中学高中历史二:第四单元中国社会主义发展道路的探索测验评讲教案
- 2025挖掘机设备租赁合同样本
- 电动机制造中的绿色制造与环保标准考核试卷
- 箱包品牌社区运营策略考核试卷
- 硫化锌纳米复合材料制造技术考核试卷
- 2025金融科技合作合同范本
- sop考试试题及答案
- 糕点店产品质量监控与改进考核试卷
- 2024-2025学年高一下学期期中考试化学试卷
- 科学管理之父:弗雷德里克·温斯洛·泰勒
- 浙江国企招聘2025宁波镇海区国资系统招聘33人笔试参考题库附带答案详解
- 自动化竞聘试题及答案
- 2025至2030年中国军用仿真(软件)行业发展战略规划及投资方向研究报告
- 整装定制合同协议
- 乳业大数据分析与消费者洞察-全面剖析
- 2025年北京石景山区高三一模英语高考模拟试卷(含答案详解)
- 2025年全国中学生汉字听写大会比赛题库及解析(共八套)
- 土钉墙、喷锚护坡分包合同
- 军队系统反腐倡廉心得体会
评论
0/150
提交评论