任务间同步及通信

在多任务实时系统中,一项工作的完成往往可以通过多个任务协调的方式共同来完成,例如一个任务从传感器中接收数据并且将数据写到共享内存中,同时另一个任务周期性的从共享内存中读取数据并发送去显示(如图 两个线程间的数据传递 )。

两个线程间的数据传递

如果对共享内存的访问不是排他性的,那么各个线程间可能同时访问它。这将引起数据一致性的问题,例如,在显示线程试图显示数据之前,传感器线程还未完成数据的写入,那么显示将包含不同时间采样的数据,造成显示数据的迷惑。

将传感器数据写入到共享内存的代码是接收线程的关键代码段;将传感器数据从共享内存中读出的代码是显示线程的关键代码段;这两段代码都会访问共享内存。正常的操作序列应该是在一个线程对共享内存块操作完成后,才允许另一个线程去操作。对于操作/访问同一块区域,称之为临界区。任务的同步方式有很多种,其核心思想都是:在访问临界区的时候只允许一个(或一类)任务运行。

原文: https://www.rt-thread.org/document/site/submodules/rtthread-manual-doc/zh/1chapters/04-chapter_ipc/