互斥与同步(二)
2014-02-22 07:29
267 查看
一、管程
1、定义:管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,主要特点如下:
局部数据变量只能被管程的过程访问。
进程通过调用管程的一个过程进入管程。
任何时候,只能有一个进程在管程中执行,调用管程的任何其他进程被挂起。
2、函数
cwait(c):调用进程的执行在条件c 上被挂起,管程现在可被另一个过程使用。——进入条件队列
csignal(c):恢复在cwait 之后为某些条件而挂起的进程的执行。——从条件队列中取出一个
3、例子
生产者-消费者问题
使用消息传递解决生产者-消费者问题
三、读者-写者问题
1、定义:有一个许多进程共享的数据区,满足以下条件,
任意多的读进程可以同时读这个文件。
一次只有一个写进程可以往文件中写。
如果一个写进程正在往文件中写时,则禁止任何读进程读文件。
1、定义:管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块,主要特点如下:
局部数据变量只能被管程的过程访问。
进程通过调用管程的一个过程进入管程。
任何时候,只能有一个进程在管程中执行,调用管程的任何其他进程被挂起。
2、函数
cwait(c):调用进程的执行在条件c 上被挂起,管程现在可被另一个过程使用。——进入条件队列
csignal(c):恢复在cwait 之后为某些条件而挂起的进程的执行。——从条件队列中取出一个
3、例子
生产者-消费者问题
cond notfull,notempty; void append(char x) { if(count == N) cwait(notfull); count ++; csignal(notempty); } void take(char x) { if(count==0) cwait(notempty); count --; csignal(notfull); }二、消息传递
使用消息传递解决生产者-消费者问题
void producer() { message pmsg; while(true) { receive(mayproduce,pmsg); pmsg = produce(); send(mayconsumer,pmsg); } } void consumer() { message cmsg; while(true) { receive(mayconsumer,cmsg); consume(cmsg); send(mayproduce,null); } } 其中,mayproduce是生产者信箱,而mayconsumer是消费者信箱。
三、读者-写者问题
1、定义:有一个许多进程共享的数据区,满足以下条件,
任意多的读进程可以同时读这个文件。
一次只有一个写进程可以往文件中写。
如果一个写进程正在往文件中写时,则禁止任何读进程读文件。
相关文章推荐
- 进程同步与互斥之经典问题二
- VxWorks下的信号量同步与互斥的应用
- 同步和互斥
- pv操作实现多进程同步和互斥
- 线程的同步与互斥
- linux 同步 互斥 概念
- python互斥锁、加锁、同步机制、异步通信知识总结
- linux字符驱动之同步互斥按键驱动
- java同步和互斥 : synchronized
- 进程-线程-同步-互斥
- 同步和互斥——生产者和消费者进程版
- Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
- 内核同步与互斥的总结
- 嵌入式linux按键驱动,同步互斥阻塞,linux进程六大状态
- 线程的同步与互斥
- 2、进程同步与互斥
- 多线程并发库高级应用 之 传统定时器、互斥、同步通信技术
- 解析Linux内核的同步与互斥机制(六)
- java基础——多线程(线程的同步互斥与通信)
- 操作系统同步互斥经典问题——读者写者问题