VxWorks支持各种任务间通信机制,主要有如下几种:
共享内存,主要是数据的共享;
信号量,用于基本的互斥和任务同步;
消息队列和管道,单CPU的消息传送;
Socket和远程过程调用,用于网络间任务消息传送;
二进制信号,用于异常处理。任务间的同步,互斥,通信。
一,共享内存:在多处理器之间的任务也可采用共享内存对象来实现任务间通信
任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。因为所有任务都存在于单一的线性地址空间,任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同上下文的代码所指向。
不管是抢占式还是时间片轮转调度,任务间都是可调度的,既然有了在多任务中对共享数据的读与写,而原生共享的数据单元并不具备对自身的保护与控制,所以这种情况下也就势必存在数据的竞态与互斥,需要我们额外的对共享的数据进行保护。要避免任务间发生对数据竞争状态,第一种方式也是最直接的方式是使任务不可被切换,那么可以使用taskLock和taskUnlock:
void fooA()
{
taskLock();
/* critical region of code that cannot be interr