6.2.1 管道
管道是一个线性字节数组,类似文件,使用文件读写进行访问;在程序里面,创建管道需要使用popen()
或者pipe()
; 管道的一个重要特点是使用管道的两个线程之间必须存在某种关系, 例如,使用popen需要提供另一端进程的文件名,使用pipe
的两个线程分别隶属于父子进程;
6.2.2 记名管道
如果要在两个不相关的线程,如两个不同进程里面的线程,之间进行管道通信,则需要使用记名管道.记名管道与文件系统共享一个名字空间.
6.2.3 套接字
socket是另外一种可以用于进程间通信的机制.
6.3 线程电报:信号
信号就是一个内核对象,或者一个内核数据结构.发送方将该数据结构的内容填写好,并指明该信号的目标进程后,发出特定的软件中断.
6.4 线程旗语:信号量
信号量实际上就是一个简单的整数,一个进程在信号变成0或者1的情况下推进,并且将信号变为1或0来防止其他进程推进.当进程任务完成后,则将信号再改变为0或1,从而允许其他进程执行
6.5 线程拥抱:共享内存
共享内存就是两个进程共同拥有同一片内存,这片内存中的任何内容,二者均可以访问.
6.6信件发送: 消息队列
新来的消息放在队列尾部, 而读取消息则从队列头部开始