进程间通信 IPC
协作的进程可能会共享一些彼此都能读写的公共存储区,这个存储区可能在内存,也可能是文件。多个进程同时操作这个共享的区域,就会产生竞争。
临界区
共享内存进行访问的程序片段叫做临界区。
1.任何两个进程不能同时处理临界区
2.不应对CPU的速度和数量做任何假设
3.临界区外运行的进程不得 阻塞其他进程
3.不得使进程无限期等待进入临界区
信号量
使用一个变量整数作为唤醒进程的标志。只有两种操作一种是Down 一种是up
解决生产者消费模型。使用三个信号量。一个称为Full,一个称为empty,一个称为mutex。进入临界区后,每个进程将信号量加1。离开的时候执行down。
信号量还有一种作用就是同步,信号full和empty保证某种事件不会发生。
互斥量
互斥量是一种处于两者之间的变量。解锁和加锁操作。只需要一个二进制 0 1 就可以表示了。当一个进程进入临界区后,调用(mutex_lock) 加锁。如果该互斥量是解锁的,则调用成功。否则阻塞进程。直到临界区中的进程(mutex_unlock)之后。
pthread 中提供的线程同步的函数。
除了mutex之外。ptread 还提供了另外一种同步机制。条件变量。条件变量允许线程由于一些未达到的条件进行阻塞。
管程
一个管程是由变量、数据结构、过程组成的集合。在管程中,任何一个时刻只有一个活跃的进程。
消息传递
进程间通信传递 send received。是系统调用。