zoukankan      html  css  js  c++  java
  • 线程竞争与同步

    背景介绍:

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

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

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

    什么叫进程互斥

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

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

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

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

    什么叫进程同步?

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

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

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

  • 相关阅读:
    Which is best in Python: urllib2, PycURL or mechanize?
    Ruby开源项目介绍(1):octopress——像黑客一样写博客
    Truncated incorrect DOUBLE value解决办法
    Qt Quarterly
    Rich Client Platform教程
    iOS6 中如何获得通讯录访问权限
    省赛热身赛之Javabeans
    [置顶] [开心学php100天]第三天:不羁的PHP文件操作
    hdu2033 人见人爱A+B
    [置顶] AAM算法简介
  • 原文地址:https://www.cnblogs.com/smallzhen/p/14472218.html
Copyright © 2011-2022 走看看