Unix Network Programming 2
卷二对Unix各种进程间通信(IPC)方法做了介绍。
IPC方法主要有(这里只列出POSIX IPC):
管道&FIFO(有名管道)
消息队列
锁与条件变量
信号量
共享内存
其中POSIX消息队列实际运用很少,就不在这里讲解了。
IPC的持续性将IPC的持续性分为3种:
随进程,如管道、非共享内存区互斥锁和条件变量
随内核,如有名信号量、共享内存
随文件
管道&FIFO管道适合进程进行少量数据的传递。
使用pipe函数创建管道,然后使用fork复制进程,子进程/父进程关闭读/写管道,最后使用write/read进行数据读写。
FIFO是有名管道,可用于无亲缘关系的进程之间进行通信。
如果write大小小雨PIPE_BUF,则write操作具有原子性。
锁和条件变量锁用来控制临界区访问,而条件变量用于等待条件。
条件变量在获取锁后,使用pthread_cond_wait会释放锁并等待条件满足时被唤醒。
为了防止虚假唤醒,条件变量被唤醒时需要监测条件是否满足123while (!is_condition_satisfied) { pthread_cond_wait(&cond, &mutex);}
线程取消带来的死锁问题pthread_cond_wait是线程取消点(cancellation point)。在阻塞在pt
...