邮箱
邮箱是一个内核对象,它提供了超出消息队列对象功能的增强的消息队列功能。邮箱允许线程同步或异步地发送和接收任何大小的消息。
概念
可以定义任意数量的邮箱(仅受可用RAM的限制)。每个邮箱都由其内存地址引用。
邮箱具有以下关键字属性:
- 已发送但尚未收到的消息的发送队列。
- 正在等待接收消息的线程的接收队列。
必须初始化邮箱才能使用。这将将其两个队列都设置为空。
邮箱允许线程交换消息,但不允许isr交换消息。发送消息的线程称为发送线程,而接收该消息的线程称为接收线程。每个消息只能由一个线程接收(即,不支持点到多点和广播消息传递)。
使用邮箱交换的消息进行非匿名处理,允许参与交换的两个线程知道(甚至指定)另一个线程的身份。
消息格式
消息描述符是一种数据结构,它指定消息数据的位置以及邮箱如何处理消息。在访问邮箱时,发送线程和接收线程都提供了一个消息描述符。邮箱使用消息描述符在兼容的发送和接收线程之间执行消息交换。邮箱还会在交换期间更新某些消息描述符字段,从而允许两个线程都知道发生了什么。
邮箱邮件包含0个或多个字节的邮件数据。消息数据的大小和格式是由应用程序定义的,可以因消息而异。消息数据有两种形式:
消息缓冲区是由发送或接收消息的线程提供的内存区域。数组或结构变量通常可以用于此目的。
消息块是从内存池中分配的内存区域。
消息可能同时没有消息缓冲区和消息块。一个既没有消息数据形式的消息被称为空消息。
注意
存在消息缓冲区或内存块,但包含实际数据的零字节的消息不是空消息。