管程
管程(Monitor)是功能更强的同步机制。
管程的定义是:一个管程定义一个数据结构和能为并发进程在其上执行的一组操作,这组操作能使进程互斥/同步,能改变管程中的数据。
一个管程由管程名称、局部于管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句四部分组成。
管程结构示意图
管程具有以下三个特性:
① 管程内部的局部数据变量只能被管程内定义的过程所访问,不能被管程外面声明的过程直接访问。
② 进程要想进入管程,必须调用管程内的某个过程。
③ 一次只能有一个进程在管程内执行,而其余调用该管程的进程都被挂起,等待该管程成为可用的。即管程能有效地实现互斥。
利用管程实现同步
定义两个条件变量x和y:
condition x , y;
操作wait(x):挂起等待条件x的调用进程,释放相应的管程,以便供其他进程使用。
操作signal(x):恢复执行先前因在条件x上执行wait而挂起的那个进程。
管程的职责与信号量的职责不同(不能累积)
管程结构示意图
进程通信
进程通信是指进程间的信息交换。
上述进程的互斥和同步机构因交换的信息量少,被归结为低级进程通信。
高级进程通信方式有很多种,大致可归并为共享内存、消息传递和管道文件三类。
1.共享内存
共享内存是在内存中分配一片空间作为共享存储区。需要进行通信的各个进程把共享存储区附加到自己的地址空间中,然后,就像正常操作一样对共享区中的数据进行读或写。
2.消息传递
消息传递系统的功能是允许进程彼此进行通信,而不必借助于共享数据。
既可实现进程的同步,又可实现在协作进程间交换信息。
消息传递系统有多种形式,通常都提供两个原语,即send和receive。
send和receive的一般格式是:
- send (destination, message)
- receive (source, message)
设计消息传递系统涉及同步、寻址、格式和排队等多项问题
3.管道文件方式
管道文件也称管道线,它是连接两个命令的一个打开文件。
例如 who | wc -l
一个命令向该文件中写入数据,称做写者;
另一个命令从该文件中读出数据。
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!