经典利用信号量实现同步的问题
来源:互联网 发布:mac grapher 编辑:程序博客网 时间:2024/06/01 19:38
1、生产者–消费者问题
问题描述:生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。本作业要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来
这里生产者和消费者是既同步又互斥的关系,首先只有生产者生产了,消费着才能消费,这里是同步的关系。但他们对于临界区的访问又是互斥的关系。因此需要三个信号量empty和full用于同步缓冲区,而mut变量用于在访问缓冲区时是互斥的。
2、读者–写者问题
问题描述:
一个数据文件或记录,统称数据对象,可被多个进程共享,其中有些进程只要求读称为”读者”,而另一些进程要求写或修改称为”写者”。
规定:
允许多个读者同时读一个共享对象,但禁止读者、写者同时访问一个共享对象,也禁止多个写者访问一个共享对象,否则将违反Bernstein并发执行条件。
通过描述可以分析,这里的读者和写者是互斥的,而写者和写者也是互斥的,但读者之间并不互斥。
由此我们可以设置3个变量,一个用来统计读者的数量,另外两个分别用于对读者数量读写的互斥,读者和读者写者和写者的互斥。
3、哲学家进餐问题
问题描述:
有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们公用一张圆桌,周围放有五把椅子,每人坐一把。在圆桌上有五个碗和五根筷子,当一个哲学家思考时,他不与其他人交谈,饥饿时便试图取用其左、右最靠近他的筷子,但他可能一根都拿不到。只有在他拿到两根筷子时,方能进餐,进餐完后,放下筷子又继续思考。
根据问题描述,五个哲学家分别可以看作是五个进程。五只筷子分别看作是五个资源。只有当哲学家分别拥有左右的资源时,才得以进餐。如果不指定规则,当每个哲学家手中只拿了一只筷子时会造成死锁,从而五个哲学家都因为吃不到饭而饿死。因此我们的策略是让哲学家同时拿起两只筷子。因此我们需要对每个资源设置一个信号量,此外,还需要使得哲学家同时拿起两只筷子而设置一个互斥信号量
- 经典利用信号量实现同步的问题
- 利用信号量实现NSURLSession的同步请求
- 利用信号量实现线程同步
- Linux利用信号量实现线程的同步与互斥
- 信号量解决经典线程同步问题
- POSIX信号量解决经典同步问题
- 信号量解决经典线程同步问题
- 利用信号量和PV操作实现进程互斥和同步问题
- 利用命名管道,互斥对象,信号量,线程同步实现生成者消费者问题
- 生产者-消费者问题实现 (linux下C同步信号量和互斥信号量的应用)
- 操作系统--信号量经典同步问题之读者优先问题
- 操作系统--信号量经典同步问题之写者优先问题
- 线程间的同步----利用信号量来实现
- 利用多线程和信号量,互斥量实现的经典的生产者与消费者模型
- 利用信号量机制解决进程同步和互斥问题
- 利用操作队列和信号量来实现操作同步
- windows多线程系列005 利用信号量实现线程同步
- 4、进程同步:进程同步的概念和同步原则,临界资源和临界区的概念,信号量及其应用,经典进程同步问题
- 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不
- Sublime搭建Java、C开发环境
- C#读取CSV文件并保存进数据库
- Linux 使用chattr设置文件属性
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
- 经典利用信号量实现同步的问题
- AOP数据库操作回滚配置
- 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1) Figure 1 shows a number triangle. Write a program that calc
- CentOS6.5下Hadoop2.8.1编译
- 快速排序算法
- ubuntu 网易云音乐安装
- jquery
- Python笔记(四)--变量类型之字符串
- .NET漫游指南-004-在dataGrid中添加CheckBox支持单选,多选,全选功能