IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍信号量(Semaphores),尽管信号量被认为是 IPC 的一种方式,但实际上通常把信号量用于进程间同步或者资源互斥,和共享内存(Shared Memory)配合使用,可以实现完美的进程间通信;Linux 既支持 UNIX SYSTEM V 的信号量集,也支持 POSIX 的信号量,本文针对 POSIX 信号量,本文给出了多个具体的实例,每个实例均附有完整的源代码;本文所有实例在 Ubuntu 20.04 上编译测试通过,gcc版本号为:9.4.0;本文的实例中涉及多线程编程和信号处理等,对 Linux 编程的初学者有一些难度。
1 POSIX 信号量概述
- 信号量与其他形式的 IPC 不同,它并不能完成一般意义上的的数据交换,也就是说,不能使用信号量将信息从一个进程传输到另一个进程;
- 信号量通常用于进程间同步或对共享资源的访问同步,也就是说,信号量可以控制可能发生冲突的共享访问的时机;
- POSIX 信号量与 SYSTEM V 信号量集不同,在内核中不是以数组的形式进行管理,所以也就不再称其为 集;
- 在阅读本文前可以参考文章《IPC之五:使用 System V 信号量集解决经典的’哲学家就餐问题’》,关于信号量的概念都是一致的;
- 也可以参考文章