PV操作是计算机领域一个有名的术语。它由荷兰人Dijkstra提出,是一种典型的同步机制,P(荷兰语passeren)表示通过,V(荷兰语vrijgeven)表示释放。
POSIX定义的semaphore就是一种PV操作。VxWorks实现了以下函数
包含组件INCLUDE_POSIX_SEM及INCLUDE_POSIX_SEM_SHOW之后,试试相应的功能
sem_post - 释放semaphore。如果没有task阻塞,则value加一,否则将优先级最高的一个task置为Ready
有没有发现这个semaphore与VxWorks的计数信号量非常非常相似,对比一下,如下图
其实semaphore就是用计数信号量封装的,因此需要移植VxWorks下的代码到其它OS时,替换相应API即可。而且,将semaphore声明为public object后,也可以用它实现进程间通信
VxWorks还提供了二进制信号量,更适用于多数情况的同步