操作系统之QQ作业-8

  1. 什么是自旋锁,什么是互斥锁?它们有什么区别?
    a.自旋锁:建立在内存区中的一个整数(任何线程进入临界区都必须检查该整数)上的,同一时刻只有一个进程能够获得的保护临界区的锁机制。
    b.互斥锁:自旋锁是一种采用循环检测锁变量状态,直到锁变量条件可用的同步控制机制
    c.区别
    互斥锁和自旋锁都是实现线程同步的并发控制机制,不同的地方在于
    自旋锁是互斥锁的一种实现方式,也就是说,互斥锁可以是一种自旋锁,并且在大多数多核CPU系统中,互斥锁都是以自旋锁的方式实现的
    互斥锁也可以是阻塞机制的,即当线程加锁不成功时,会阻塞自己,实现“让权等待”;而当线程加锁自旋锁不成功时,多核CPU环境中,会一直占用CPU直到另一个CPU上的线程解锁;单核CPU环境中,线程会一直占用CPU直到中断发生,由调度程序选择另一个线程执行。在多核CPU环境中,自旋式互斥锁不需要执行上下文切换,所以执行的效率要高于阻塞式互斥锁

  2. 说明二元信号量、整型信号量和记录型信号量的区别
    a.二元信号量:只允许使用0和1来表示,用于解决进程互斥和同步的信号量。具体情况为: P操作检查信号量的值,若为0,则执行P操作的进程会被阻塞,若为1, 就将该值改为0,并继续执行该进程; V操作用来检查是否有进程在该信号上受阻,若有受阻,则通过V操作的进程将会被唤醒,若没有受阻,则设值为1。.
    b.整型信号量:一个用来表示系统中某种资源的数量的,只能执行初始化、P、V三种操作,用原语来实现“检查”和“上锁”操作且不满足让权等待准则的整数型的信号量。
    c.记录型信号量:拥有一个包含了表示资源个数的整型量和一个等待队列的结构体, 来实现系统资源的申请、释放以及进程互斥和进程同步的表示记录性数据结构的信号量。
    d.区别:二元信号量只有0和1两个值,整数型信号量中表示系统中某资源的值只能为整数,记录型信号量用value的初值表示系统中某资源的数目。

  3. 信号量如何避免peterson算法缺陷的。

/*某进程需要使用资源时,通过wait原语申请*/
void wait(semaphore S){
      S.value-;
      if(S.value<0){
        block(S.L);
       }
}

S.value的初值表示系统中某种资源的数目。对信号量S的一次P操作代表进程请求一一个 单位的该类资源,因此需执行S.value-,表示资源数减1,当S.value<0时表示该类资源已分配完毕,因此进程将调用block原语进行自我阻塞,当前运行的进程从运行态变为阻塞态。进程将主动放弃处理机并插入该类资源的等待对列S.L中。记录型信号量的信号机制遵循了让权等待,不会出现忙等待,从而避免了peterson算法的缺陷。

原创文章 66 获赞 100 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44735533/article/details/105233775
今日推荐