20155211 课下测试ch12补做
20155211 课下测试ch12补做
- 有关线程图,下面说法正确的是()
A.图的原点表示没有任何线程完成一条指令的初始状态
B.向右向上是合法的转换
C.向左向下是合法的转换
D.对角线是合法的转换
E.一个程序执行的历史被模型化成状态空间中的一条轨迹线
F.进度图中,两个临界区的交集形成不安全区
正确答案: A B E F p701 合法的转换是向右或者向上的。对角线转换是不允许的。
- 下面代码对于并发程序来说逻辑上是()条指令?
for(i=0;i<1000; i++) cnt++;
A.2
B.3
C.4
D.5
E.6
F.1
正确答案: D p699 我们将循环代码分解成五个部分。
- 有关多线程的说法,正确的是()
A.竞争和死锁是并发程序中出现的难题
B.程序员错误的假设逻辑流该如何调度时就会发生竞争
C.当一个逻辑流等待一个永远不会发生的事件时就会产生死锁
D.程序使用PV的顺序不当,可能引发死锁
E.利用互斥锁加锁顺序规则可以避免互斥死锁
正确答案: A B C D E p721 程序员使用P和V操作顺序不当,以至于两个信号量的禁止区域重叠。死锁,指的是一组线程被阻塞了。
- 下面Linux函数()是线程安全的?
A.rand()
B.ctime()
C.printf()
D.localtime_r()
E.scanf()
正确答案: C D E p718 可重入函数通常要比不可重入的线程安全的函数高效一些。
- 线程不安全函数类包括()
A.不保护共享变量的函数
B.保持跨越多个调用的状态的函数
C.返回指向静态变量指针的函数
D.调用线程不安全函数的函数
E.调用可重入函数的函数
正确答案: A B C D p716可重入函数,线程安全函数和线程不安全函数之间的集合关系参照p717页图12-39.
- 有关并发程序,下面说法正确的是()
A.程序可以分为并发程序和顺序程序两类
B.程序可以分为并行程序和顺序程序两类
C.并发程序是一种特殊的并行程序
D.并行程序是一种特殊的并发程序
正确答案: A D p711参见图12-30,所有程序的集合能够被划分为不相交的顺序程序集合和并发程序的集合。写顺序程序只有一条逻辑流,写并发程序有多条逻辑流。并行程序是一个运行在多个处理器上的并发程序。因此,并行程序的集合是并发程序集合的真子集。
- 有关“生产者-消费者”和“读者-写者”模型,下面说法正确的是()
A.二者除处理的都是互斥问题
B.二者除处理的都是同步问题
C.二者都要保证对缓冲区的访问是互斥的
D.“生产者-消费者”模型要保证对缓冲区的访问是互斥的
E.“读者-写者”模型要保证读者对缓冲区的访问是互斥的
正确答案: B D p704读者-写者问题是互斥问题的一个概括。生产者和消费者线程共享一个有n个槽的有限缓冲区。
- 有关使用信号量实现互斥的说法正确的是()
A.互斥是一种特殊的同步
B.使用二元信号量和PV原语可以实现互斥
C.对于信号量sem_t mutex;
Sem_init(&mutex, 0 , 2);把mutex初始化为二元信号量,用作互斥锁
D.对于共享变量volatile long cnt = 0;
for(i=0; i<ntiers; i++){
P(&mutex)
cnt++;
V(&mutex)
}
保证了对cnt的 访问是互斥的,cnt的计数是正确的
正确答案: A B D p704 D代码为p704例代码。
- 有关信号量(semphore),下面说法正确的是()
A.信号量s是一个非负的全局变量
B.信号量只能通过P,V操作来处理
C.P,V操作确保信号量s非负
D.sem_post()完成P(s)的操作
E.sem_wait()完成V(s)的操作
正确答案: A B C p702 s是具有一个肺腑整数值的全局变量,只能有两种特殊的操作P和V来处理。
- 有关下面的代码hello.c,编译后的可执行程序为phello,下面说法正确的是()
A.编译命令是:gcc hello.c -o phello
B.编译命令是:gcc hello.c -lpthread -o phello
C.编译命令是:gcc hello.c -pthread -o phello
D.phello运行时有一个线程
E.phello运行时有两个线程
F.phello运行时主线程先执行完
G.phello运行时对等线程先执行完
H.phello运行时对等线程和主线程执行顺序不确定
正确答案: B C E G 为家庭作业12.17
解析:多线程编译需要-lpthread或-pthread参数;pthread_join使得主线程等待对等线程先执行完
- 有关线程控制,下面说法正确的是()
A.与进程一样,线程也有父子关系
B.与进程控制中fork() 等价的是pthread_create()
C.与进程控制中exit() 等价的是pthread_exit()
D.与进程控制中waitpid()等价的是pthread_join()
E.与进程控制中kill() 等价的是pthread_cancel()
F.与进程控制中getpid() 等价的是pthread_self()
正确答案: B C D E F
解析:线程只有主线程和对等线程,其他与进程的对比要理解。线程就是运行在进程上下文中的逻辑流。
- 关于线程,下面说法正确的是()
A.线程是运行在进程中的逻辑流
B.每个线程有自己的线程上下文,包括TID、栈、栈指针、PC、通用寄存器和条件码
C.进程是程序级并发,线程是函数级并发
D.一个进程中的线程共享该进程的虚拟地址空间
正确答案: A B C D
解析:p691:注意并发粒度的不同:进程是程序级并发,线程是函数级并发。多线程的执行模型在某些方面和多进程的执行模型是相似的。
- 一个状态机包含()
A.状态
B.事件
C.自循环
D.转移
正确答案: A B D p687 一个状态机就是一组状态,输入事件和转移。
- 有关下面代码,编译后的可执行程序是echoserv,下面说法正确的是()
A.第19行中的STDIN_FILENO的值可以用grep -nr STDIN_FILENO /usr/include 查到为1
B.第24行select()会导到致程序阻塞,可以替代accept()
C.程序运行时,输入CTRL+D,可以让select返回
D.以上代码中加入csapp.h就能编译成功
正确答案: C
解析:grep -nr STDIN_FILENO /usr/include STDIN_FILENO为0 p686为图12-6该图展示了可以如何利用select来实现一个迭代echo服务器,它也可以接受标准输入上的用户命令。
- 有关下面代码,编译后的可执行程序是echoserv,下面说法正确的是()
A.这是一个并发echo服务器
B.这是一个迭代echo服务器
C.第33行关闭已连接描述符
D.第33行关闭监听描述符
E.删除第33行会导致内存泄露
F.
./echoserv 5056 ,5056是连接的客户端进程的端口号
G.
./echoserv 5056 ,5056是连接的服务器进程的端口号
H.删除第30行会导致内存泄露
正确答案: A C E G p682, 习题12.2参考十一章
- 现代操作系统提供的构造并发程序的方法有()
A.异常
B.进程
C.I/O多路复用
D.信号
E.线程
正确答案: B C E p681emm书上原话
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步