以下的生产者消费者程序中,那个不会出现锁死,并且开销最少?
来源:互联网 发布:unity3d 5.x 动画系统 编辑:程序博客网 时间:2024/06/05 20:14
以下的生产者消费者程序中,那个不会出现锁死,并且开销最少?
注:
down()
1 判断信号量的取值是否大于等于1
2 如果是,将信号量的值减去一,继续向下执行
3 否则,在该信号量上等待(进城被挂起)
up()
1 将信号量的值增加1(此操作将叫醒一个在信号量上面等待的进程)
2 线程继续往下执行
down()和up()是一组原子操作
A:
B:#define N 100 //定义缓冲区的大小typedef int semaphore; //定义信号量类型semaphore mutex = 1; //互斥信号量semaphore empty = N; //缓冲区计数信号量semaphore full = 0; //缓冲区计数信号量,用来计数缓冲区里的商品数量void producer(void){ int item; while(TRUE){ item = produce_item(); down(&empty); down(&empty); insert_item(item); up(&mutex); up(&full); }}void consumer(void){ int item; while(TRUE){ down(&full); down(&mutex); item = remove_item(); up(&mutex); up(&empty); consume_item(item); }}
C:#define N 100typedef int semaphore;semaphore empty = N;semaphore full = 0;void producer(void){ int item; while(TRUE){ item = produce_item(); down(&empty); insert_item(item); up(&full); }}void consumer(void){ int item; while(TRUE){ down(&full); item = remove_item(); up(&empty); consume_item(item); }}
D:#define N 100typedef int semaphore;semaphore mutex = 1;semaphore empty = N;semaphore full = 0;void producer(void){ int item; while(TRUE){ item = produce_item(); down(&empty); down(&empty); insert_item(item); up(&mutex); up(&full); }}void consumer(void){ int item; while(TRUE){ down(&mutex); down(&full); item = remove_item(); up(&mutex); up(&empty); consume_item(item); }}
#define N 100typedef int semaphore;semaphore mutex = 1;semaphore empty = N;semaphore full = 0;void producer(void){ int item; while(TRUE){ item = produce_item(); down(&empty); down(&mutex); insert_item(item); up(&full); up(&mutex); }}void consumer(void){ int item; while(TRUE){ down(&full); down(&mutex); item = remove_item(); up(&empty); up(&mutex); consume_item(item); }}
正确答案:D;
解析:
首先互斥变量是相互对称的,第二没有互斥量会造成死锁。根据这两个条件就可以排除ABC。一个产品只能被一个消费者或一个生产者使用,必须要用互斥量,否则会进入两个角色会进入请求等待状态。
单生产者单消费者是B,多生产者多消费者是D
互斥变量是相互对称的,第二没有互斥量会造成死锁
1 0
- 以下的生产者消费者程序中,那个不会出现锁死,并且开销最少?
- 多线程的生产者以及消费者程序。
- 生产者消费者程序的实现 Java
- .Net 中实现ShowDialog不会全都锁死的办法
- 生产者消费者模拟程序
- 生产者消费者模拟程序
- 生产者消费者程序
- 生产者、消费者程序练手
- Java中,生产者和消费者的问题
- 生产者消费者--多个线程出现的问题
- 生产者消费者--多个线程出现的问题
- WinForm中出现窗体未响应,程序锁死解决办法
- 基于内置锁的生产者消费者模型
- 生产者-消费者的问题
- 简单的生产者-消费者
- 生产者消费者 协同程序 python
- Java生产者消费者程序模型
- 一个生产者与消费者模型的多线程例子程序
- 编程心得
- Autolayout屏幕适配库导入后报错解决
- c#调用Java的webservice出现身份验证失败的解决方案
- virtualbox中ubuntu和windows共享文件夹设置
- LeetCode92 Reverse Linked List II
- 以下的生产者消费者程序中,那个不会出现锁死,并且开销最少?
- 腾讯应用宝认领应用步骤
- 143. Reorder List
- java大概
- 对highcharts的总结(饼图、柱状图、折线图、曲线图)
- MySQL for Windows 解压缩版配置安装及my-default.ini说明
- nginx 反向代理 ,配置 含自定义header 和php fastcgi
- rails --查询数据表
- js 上下文字滚动效果