在多任务操作系统环境下,在不同进程之间,为了争夺有限的系统资源(硬件或软件资源)会进入竞争状态,这就是进程之间的互斥关系。
信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制。
信号量对应于某一种资源,取一个非负的整型值。
V操作:如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程。如果没有进程等待它,则释放一个资源(给信号量值加一)。
信号量的使用
第一步:创建信号量或获得在系统已存在的信号量,此时需要调用semget()函数。不同进程通过使用同一个信号量键值来获得同一个信号量。
第二步:初始化信号量,此时使用semctl()函数的 SETVAL操作。当使用二维信号量时,通常将信号量初始化为1。第四步:如果不需要信号量,则从系统中删除它,此时使用semclt()函数的IPC_RMID操作。此时需要注意,在程序中不应该出现对已经被删除的信号量的操作。