牛客网选择题之并发

  1. 在分时操作系统中,进程调度采用()算法
    时间片轮转
  2. 某系统中有 3 个并发进程,都需要同类资源 4 个,试问该系统不会发生死锁的最少资源数是:9
    有n个进程,共享的同类资源数为m,则避免死锁的最少资源数是n .(m-1)+1。
    3个进程需要各需要占用3个资源,因此当有9个资源时,刚好够分别分给这3个进程,但是这3个进程都还需要第4个资源,因此至少需要10个资源,才不会使其陷入死锁。有n个进程,共享的同类资源数为m,则避免死锁的最少资源数是n *(m-1)+1。3个进程需要各需要占用3个资源,因此当有9个资源时,刚好够分别分给这3个进程,但是这3个进程都还需要第4个资源,因此至少需要10个资源,才不会使其陷入死锁。
  3. 假设下面的函数foo会被多线程调用,那么让i、j、k三个变量哪些因为线程间共享访问需要加锁保护.()
int i = 0;
void foo()
{
   static int j = 0;
   int k = 0;
   i++; j++; k++;
}

多线程调用时要进行保护时,主要是针对全局变量和静态变量的,函数内的局部变量不会受到影响。
这里i是全局变量,j是局部静态变量,所以 要进行保护。
4. 一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围为 [50,100]

int tally=0;//全局变量
  void ThreadProc(){
     for(int i=1;i<=50;i++)
  tally+=1;
}
  1. 多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为:
    同步

  2. 下列关于轮询任务调度和可抢占式调度区别描述错误的是?
    抢占式调度优点是其简洁性,它无需记录当前所有连接的状态
    轮询调度不利于后面的请求及时得到响应
    抢占式调度有利于后面的高优先级的任务也能及时得到响应
    抢占式调度实现相对较复杂且可能出现低优先级的任务长期得不到调度

  3. 下面关于并行和并发的区别,说法错误的是?
    并发计算是一种程序计算的形式,在系统中,至少有两个以上的计算在同时运作,计算结果可能同时发生
    并行计算指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算的过程分解成小部份,之后以并发方式来加以解决
    并行是同时发生的多个并发事件,并发事件之间一定要同一时刻发生
    并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生

  4. 下列哪种操作可能带来死锁?
    lock(m1) lock(m2) unlock(m1) unlock(m2)
    lock(m1) lock(m2) unlock(m2) lock(m2) unlock(m1) unlock(m2)
    lock(m1) lock(m2) unlock(m1) lock(m1) unlock(m2) unlock(m1)
    lock(m1) lock(m2) unlock(m1) unlock(m2) lock(m1) unlock(m1)

假设有两个线程,线程1执行到lock(m1),lock(m2),unlock(m1),此时线程1持有锁m2,想要获取锁m1;线程2执行到lock(m1),此时线程2持有锁m1,想要获取锁m2。两个线程都拿着对方想要得到的锁,造成死锁。

  1. 列关于多线程,多进程,多任务的区别与关系描述正确的有?
    线程是指进程内的一条执行线路,或者说是进程中可执行代码的单独单元,它是操作系统的基本调度单元。
    一个进程至少有一个线程,即主线程,也可以有多个线程协同工作。
    进程从主线程开始执行,进而可以创建一个或多个附加线程来执行该进程内的并发任务,这就是基于线程的多任务

    上述描述都是错误的

10.轮询任务调度与抢占式任务调度的区别?

抢占式调度优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度
轮询调度优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度
轮询调度实现相对较复杂
抢占式调度实现相对较复杂

11.有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?
1
2
3
4

第一种可能情况:现在假设两个线程没有并行顺序执行的那么结果显然是 4。
第二种可能情况:再假设现在第一个n++ 已经执行完了 但是结果还没有写回内存 这个时候 n+=2 已经全部执行完 2 写进了内存 结束 然后回到n++的写回操作 这个时候内存就从2被改回1了,后面再来一次n++ 结果就为2。
第三种可能情况:第n+=2 先读取n的值到寄存器 即0入寄存器 这个时候被中断 第一个n++开始执行 并直到结束 内存被改成了1 ,然后 n+=2 继续执行 结束后内存变为2 第二个n++再执行 结果就是3了
12.数据库以及线程发生死锁的原理是什么?
资源分配不当
进程运行推进的顺序不合适
系统资源不足
进程过多
13.同步机制应该遵循哪些基本准则?
空闲让进
忙则等待
有限等待
让权等待
14.关于进程和线程,下面说法正确的是?
线程是资源分配和拥有的单位
线程和进程都可并发执行
在linux系统中,线程是处理器调度的基本单位
线程的粒度小于进程,通常多线程比多进程并发性更高

不同的线程共享相同的栈空间
15.两个线程并发执行以下代码,假设a是全局变量,初始为1,那么以下输出______是可能的?(都有可能)
3 2
2 3
3 3
2 2

16.产生系统死锁的原因是由于()
进程释放资源
一个进程进入死循环
多个进程竞争,资源出现循环等待
多个进程竞争共享型设备

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值