本章节将讲述另一种进程/线程间通信的机制——POSIX信号量,为了明确与systemV信号量间的区别, 若非特别说明,本章出现的信号量均为POSIX信号量。也要注意请不要把它与之前所说的信号混淆了, 信号与信号量是不同的两种机制。
1. POSIX信号量基本概念
信号量(Semaphore)是一种实现进程/线程间通信的机制,可以实现进程/线程之间同步或临界资源的互斥访问, 常用于协助一组相互竞争的进程/线程来访问临界资源。在多进程/线程系统中, 各进程/线程之间需要同步或互斥实现临界资源的保护,信号量功能可以为用户提供这方面的支持。
在 POSIX标准中,信号量分两种,一种是无名信号量,一种是有名信号量。 无名信号量一般用于进程/线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。 有名信号量和无名信号量的差异在于创建和销毁的形式上,但是其他工作一样,无名信号量则直接保存在内存中, 而有名信号量则要求创建一个文件。
正如其名,无名信号量没有名字,它只能存在于内存中,这就要求使用信号量的进程/线程必须能访问无名信号量所在的这一块内存, 所以无名信号量只能应用在同一进程内的线程之间同步或者互斥。相反,有名信号量可以通过名字访问, 因此可以被任何知道它们名字的进程或者进程/线程使用。单个进程中使用POSIX 信号