前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >竞态条件及其解决方法

竞态条件及其解决方法

作者头像
Steve Wang
发布2021-12-06 16:33:03
2.1K0
发布2021-12-06 16:33:03
举报
文章被收录于专栏:从流域到海域从流域到海域

竞态条件(race condition)

竞态条件(race condition)指的是两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。竞争条件会产生超出预期的情况,一般情况下我们都希望程序执行的结果是符合预期的,因此竞争条件是一种需要被避免的情形。

竞争条件分为两类:

  • Mutex(互斥):两个或多个进程彼此之间没有内在的制约关系,但是由于要抢占使用某个临界资源(不能被多个进程同时使用的资源,如打印机,变量)而产生制约关系。
  • Synchronization(同步):两个或多个进程彼此之间存在内在的制约关系(前一个进程执行完,其他的进程才能执行),如严格轮转法。

要阻止出现竞态条件的关键就是不能让多个进程/线程同时访问那块共享变量。访问共享变量的那段代码就是临界区(critical section)。所有的解决方法都是围绕这个临界区来设计的。

想要成功的解决竞态条件问题,保证程序可以正确的按逻辑顺序运行,从理论上应该满足以下四个条件:

  1. 不会有两个及以上进程同时出现在他们的critical section。
  2. 不要做任何关于CPU速度和数量的假设。
  3. 任何进程在运行到critical section之外时都不能阻塞其他进程。
  4. 不会有进程永远等在critical section之前。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 竞态条件(race condition)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档