• 线程竞争与同步


    背景介绍:

      在多线程的环境里,如果共享资源没有上锁,将会出现共享数据混乱的情况。

      在单核CPU系统里,系统以时间片调度的方式让多个程序轮流使用处理器,造成了【并发】的假象。

      在进程/线程并发执行的过程中,进程/线程之间存在协作的关系,比如互斥、同步。 

    什么叫进程互斥

      两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与实践有关的错误,这种现象叫进程互斥。

    操作系统如何实现进程/线程互斥:

    • :任何想进临界区的线程都必先加锁,完成访问后再解锁,释放临界资源。
      • 忙等待锁(自旋锁):当线程获取不到锁时会一直循环,不做任何事情,直到锁可用。
      • 无忙等待锁:获取不到锁是,不自旋,把当前线程放到锁等待队列,执行调度程序,把CPU让给其他线程执行。
    • 信号量:表示资源的数量,对应的变量是一个sem变量。由两个原子操作PV的系统调用函数控制信号量(PV必须成对出现):
      • P操作:进入临界区之前,将sem-1,如果sem<0,则进程/线程阻塞等待,否则继续。
      • V操作:离开临界区之后,将sem+1,如果sem>=0,唤醒一个等待中的进程/线程。

       通过互斥信号量方式,能保证临界区任何时刻只有一个线程在执行,达到了互斥效果。    

    什么叫进程同步?

      异步环境下的一组并发进程因直接制约而互相发送消息、相互合作、相互等待,使得进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程叫合作进程。

      使用PV信号量实现进程同步的演示流程如下:

    以上参考:https://mp.weixin.qq.com/s/Akv6c4fGlpT4VlhRo3gscw

  • 相关阅读:
    C语言|博客作业08
    C语言|博客作业04
    C语言|博客作业02
    C语言|博客作业06
    C语言|博客作业03
    第一周作业
    C语言|博客作业05
    C语言|博客作业07
    C语言|博客作业09
    为什么get比post更快
  • 原文地址:https://www.cnblogs.com/smallzhen/p/14472218.html
Copyright © 2020-2023  润新知