7-1RT-Thread邮箱
同步实现了多线程在访问共享资源时执行顺序的控制。如线程1实现串口的监控,当串口接收到数据后通知线程2读取数据,相当于只给了通知,而没有给通知的具体内容,而通信则是将通知的具体内容也告知对方。如线程1负责采集温度,线程2负责屏幕显示,两个线程之间的联系是采集到的温度数据。我们需要通信将数据从线程1发送给线程2。
当需要在线程间传递较大的数据时,可以把指向数据的指针作为邮件发送到邮箱中,典型的邮箱也称作交换消息。
如上图所示,线程或中断服务历程把一封四字节长度的邮件发送到邮箱中。而一个或多个线程可以从邮箱中接收这些邮件并进行处理。
发送的邮件是32位无符号整形数据,可以是一个整型值或者一个指向缓冲区的指针等待方式。
发送等待函数的区别在于有等待时间。如果邮箱已满,那么发送线程将根据设定的timeout参数等待邮箱中因为收取邮件而空出的空间。如果设置的超时时间到达,依然没有空出空间,这时发送线程将被唤醒并返回错误码。
接收者需要指定接收邮件的邮箱句柄,并指定接收到的邮件存放的位置以及最多能够等待的超时时间。