码迷,mamicode.com
首页 > 编程语言 > 详细

线程竞争与同步

时间:2021-03-03 12:23:58      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:color   image   异步   同步   必须   数据   加锁   相互   用处   

背景介绍:

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

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

技术图片

 

 

 

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

什么叫进程互斥

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

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

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

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

技术图片技术图片

什么叫进程同步?

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

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

技术图片技术图片

 

 

 

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

 

线程竞争与同步

标签:color   image   异步   同步   必须   数据   加锁   相互   用处   

原文地址:https://www.cnblogs.com/smallzhen/p/14472218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!