在有N个缓冲区的生产者消费者的问题中,下列叙述中哪些是错误的?producer() { int item; while(TRUE) { item = produce_item(); P(empty); P(mutex); insert_item(item); V(mutex) V(full); } } consumer() { int item; while(TRUE) { P(full); P(mutex); item = remove_item(); V(mutex); V(mutex); consume_item(item); } }A.信号量empty的初值为NB.信号量full的初值为0C.信号量mutex的初值为0D.P(full)和P(mutex)两条语句可以颠倒顺序E.V(mutex)和V(mutex)两条语句可以颠倒顺序
在有N个缓冲区的生产者消费者的问题中,下列叙述中哪些是错误的?producer() { int item; while(TRUE) { item = produce_item(); P(empty); P(mutex); insert_item(item); V(mutex) V(full); } } consumer() { int item; while(TRUE) { P(full); P(mutex); item = remove_item(); V(mutex); V(mutex); consume_item(item); } }
A.信号量empty的初值为N
B.信号量full的初值为0
C.信号量mutex的初值为0
D.P(full)和P(mutex)两条语句可以颠倒顺序
E.V(mutex)和V(mutex)两条语句可以颠倒顺序
相关考题:
试题四阅读以下说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n, int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:#define MAXSIZE 32typedef struct {int *elem; /* 栈的存储区 */int max; /* 栈的容量,即栈中最多能存放的元素个数 */int top; /* 栈顶指针 */}Stack;[C代码]int InitStack(Stack *S, int n) /* 创建容量为n的空栈 */{ S-elem = (int *)malloc(n * sizeof(int));if(S-elem == NULL) return -1;S-max = n; (1) = 0 ; return 0;}int Push(Stack *S, int item) /* 将整数item压入栈顶 */{ if(S-top == S-max){ printf("Stack is full!\n"); return -1;}(2) = item ; return 0;}int StackEmpty(Stack S) { return (!S.top) ? 1 : 0; } /* 判断栈是否为空 */int Pop(Stack *S) /* 栈顶元素出栈 */{ if(!S-top) { printf("Pop an empty stack!\n"); return -1;}return (3) ;}void MultibaseOutput(long n, int B){ int m; Stack S;if (InitStack(S, MAXSIZE)) {printf("Failure!\n"); return;}do {if (Push(S, (4) )) {printf("Failure!\n"); return;}n = (5) ;}while(n != 0);while(!StackEmpty(S)) { /* 输出B进制的数 */m = Pop(S);if(m 10) printf("%d", m); /* 小于10,输出数字 */else printf("%c", m + 55); /* 大于或等于10,输出相应的字符 */}printf("\n");}
●试题一阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。【函数1.1说明】函数strcpy(char*to,char*from)将字符串from复制到字符串to。【函数1.1】void strcpy(char*to,char*from){while( ( 1 ) );}【函数1.2说明】函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。【函数1.2】void merge(int a[ ],int n,int b[ ],int m,int *c){ int i,j;for(i=j=0;i<n j<m;)*c++=a[i]<b[j]? a[i++]:b[j++];while( (2) )*c++=a[i++];while( (3) )*c++=b[j++];}【函数1.3说明】递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。【函数1.3】int sum(int a[ ],int n){ if(n>0)return (4) ;else (5) ;}
阅读以下说明和C程序代码,将应填入______处的语句写在答题纸的对应栏内。[说明]函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:define MAXSIZE 32typedef struct{int * elem; /* 栈的存储区 */int max; /* 栈的容量,即栈中最多能存放的元素个数 */int top; /* 栈顶指针 */}Stack;[C代码]int InitStack(Stack * S,int n) / * 创建容量为n的空栈 */{ S->elem=(int *)malloc(n * sizeof(int));if(S->elem==NULL)return-1;S->max=n; (1)=O;return 0;}int Push(Stack * S,int item) / * 将整数item压入栈顶 * /{ if(S->top==S->max){ printf(“Stack is full! \n”);return-1;}(2)=item;return 0;}int StackEmpty(StackS) {return (! S.top)? 1:0;} / * 判断栈是否为空 * /int Pop(Stack *S ) / * 栈顶元素出栈 * /{ if(! S->top){printf(“Pop an empty stack! \n”);return-1;}return (3);}void MultibaseOutput(long n,int B){ int m;StackS;if (InitStack(S,MAXSIZE)){printf(“Failure! \n”);return;}do {if(Push(S, (4) )){printf(“Failure! \n”);return;}n=(5);}while(n!=0);while(! StackEmpty(S)){ / * 输出B进制的数 * /m=Pop(S);if(m<10)printf(“%d”,m); / * 小于10,输出数字 * /else printf(“%c”,m+55); / * 大于或等于10,输出相应的字符 * /}printf(“\n”);}
下列关于生产者消费者的叙述中,哪一个是正确的?A.生产者往缓冲区放产品前要先使用P操作确保缓冲区有空闲槽B.生产者往缓冲区放产品前要先使用V操作确保缓冲区有空闲槽C.消费者从缓冲区取产品前要先用P操作确保缓冲区互斥使用D.生产者往缓冲区放产品前要先用P操作确保缓冲区互斥使用
include void main( ) { int n=9; while(n>6) { n--; cout #include<iostream.h> void main( ) { int n=9; while(n>6) { n--; cout < < n;} } 该程序的输出结果是A.987B.876C.8765D.9876
下列程序是死循环的是A.for(;;);B.int s=36; while(S)--S;C.int m=10; do { m- - }while(m0);D.int n=5; while(n1) { n- -; if(n0)break; }
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。注意:不改变程序的结构,不得增行或删行。class DataPool{private int data;private boolean isFull;public DataPool(){isFull=false;}public synchronized void putData(int d){if(isFull= =true){try{this.notify();}catch(InterruptedException e){}}data=d;isFull=true;System.out.println("生产了一个数据:"+data);this.notify();}public synchronized int getData(){if(isFull= =false){try{this.wait();}catch(InterruptedException e){}}isFull=false;System.out.println("消费了一个数据"+data);this.wait();return this.data;}boolean getIsFull(){return isFull;}}class Producer extends Thread{DataPool pool;public Producer(DataPool pool){this.pool=pool;}public void run(){for(int i=0; i<10; i++){int data=(int) (Math.random()*1000);try{//用于生产数据sleep(data);}catch(InterruptedException e){}pool.putData(data);}}}class Consumer implements Runnable{DataPool pool;public Consumer(DataPool pool){this.pool=pool;}public void run(){for(int i=0; i<10; i++){int data=pool.getData();try{//用于处理数据sleep((int) (Math.random()*1000));}catch(InterruptedException e){}}}}public class advance}public static void main(String[] args){Data Pool pool=new Data Pool();Producer pro=new Producer(pool);Runnable con=new Consumer(pool);Thread conTh=new Thread(con);&n
下列程序是死循环的是 ( )A.for(;;)B.int s=36; while(s)=s;C.int m=10; do{m- -;}while(m>0);D.int n=5; while(n>1) { n- -; if(n<0)break; }
下列函数原型声明中,错误的是A.int function(int m,int n);B.int function(int,int);C.int function(int m=3,int n);D.int function(intm,intn);
下面程序的运行结果是( )。 include main() {int a,b,c,n; a=2;b=0;c=1;n=1; while(n 下面程序的运行结果是( )。 include<stdio.h> main() {int a,b,c,n; a=2;b=0;c=1;n=1; while(n<=3) {c=c*a;b=_b+c;++n;} printf("b=%d",B); }
avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是A)int avg(jnt *a,int n.);B)int avg(int a[10],int n);C)int avg(int a,int n);D)int avg(int a[ ],int n);
下列给定程序中,函数fun()的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <stdio.h>include <conio.h>void fun(char *s){int i,j;for(i=0,j=0; s[i]!= '\0'; i++)if(s[i]>= '0's[i]<= '9')/*************found**************/s[j]=s[i];/*************found**************/s[j]="\0";}main(){char item[80];clrscr();printf("\nEnter a string: ");gets(item);printf("\n\nThe string is:\%s\n", item);fun(item);printf("\n\nThe string of changing is :\%s\n",item);}
int Calc(unsigned int x){int count=0;while(x){printf("x=%i\n",x);count++;x=x(x-1);}return count;}问 Calc(9999)的值是多少。
下面程序的输出结果是()。includeusing namespace std;int main(){int n=10;while(n>7 下面程序的输出结果是( )。 #include<iostream> using namespace std; int main() { int n=10; while(n>7){ n--; cout<<11<<','; } cout<<endl; }A.10,9,8,B.9,8,7,C.10,9,8,7,D.9,8,7,6,
下列给定程序中函数fun()的功能是计算1/n!的值。例如:给n输入5,则输出0.0083330请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <stdio.h>include <conio.h>/******+****found*************/int fun(int n){double result=1.0;if(n==0)return 1.0;while(n>1 n<170)/**********found************/result *=n++;result=1/result;return result;}main(){int n;printf("Input N:");scanf("%d",n);printf("\n1/%d!=%If\n",n,fun(n));}
av9功能是求整形数组中的前若干个元素的平均值,设数组元素个数最多不超过则下列函数说明语句错误的是( )。A.int avg(int*a,int n);B.int avg(int a[lO],int n);C.int avg(int a,int n);D.int avg(int a[],int n);
下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include<stdio.h>include<conio.h>void fun(char*S){int i,j;for(i=0,j=0;s[i]! ='\0';i++)/*************found************/if((s[i]>='A's[i]<='Z')(s[i]>= 'a'S[i]<='z',))s[j++]=s[i];/*************found*************/s[j]=“\0”;}main(){char item[80];clrscr();printf(“\nEnter a string:”);gets(item);printf(“\n\nThe string is:\%S\n",item);fun (item);printf("\n\nThe string of changingis:\%S\n",item);}
有如下程序:includemain(){ int n=9;while(n>6){n--;printf("%d",n);}}该程序的输出结 有如下程序: #include<stdio.h> main() { int n=9; while(n>6){n--;printf("%d",n);} } 该程序的输出结果是( )。A.987B.876C.8765D.9876
下列选项中,不能输出100个整数的是( )。A.for(int i=0;i 下列选项中,不能输出100个整数的是( )。A.for(int i=0;iB.int i=0; do{ System.out.println(i); i++; }while(iC.int i=0; while(iD.int i=0; while(i
下列各程序段中,不是死循环的是( )。A.int j=100;B.for(;;) while(1) {j=j%100+1; if(j>1000) break; }C.int n=0;D.int m=36; do{ while(m)--m; ++n; }while(n>=0);
()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]设有定义 #define ITEM struct item #define SIZE sizeof(ITEM) ITEM { int num; ITEM *next; }; ITEM *head=NULL; 下述函数定义实现按插表尾形式(即每一新表元素插入至当前所生成链表的表尾之后)生成一个正向线性链表。最后指向所生成链表表头的指针作为函数值返回。为生成一个线性链表,要求输入一批整型数据,并以-1作为结束标志。请填空完善程序。 ITEM *gene(ITEM *head) { ITEM *temp,*tail;/*tail指向当前链表尾结点*/ int intno; printf("Enter integer NO.,-1 to stop:\n"); scanf("%d",intno); while (intno!=-1) { temp=(____(1)_____)malloc(SIZE); temp-num=intno; if (head==_____(2)_____) /*空表*/ { head=temp; tail=______(3)______; } else /*非空表*/ { ____(4)_______=temp; tail=temp; } scanf("%d",intno); } return (_______(5)_______);
单选题avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是( )。Aint avg(int *a,int n);Bint avg(int a[10],int n);Cint avg(int a,int n);Dint avg(int a[],int n);
单选题下列函数原型声明中,错误的是( )。Aint function(int m,int n);Bint function(int,int);Cint function(int m=3,int n);Dhat function(intm,intn);