竞态条件及其解决方法
2023-04-18 12:30:52 时间
竞态条件(race condition)
竞态条件(race condition)指的是两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。竞争条件会产生超出预期的情况,一般情况下我们都希望程序执行的结果是符合预期的,因此竞争条件是一种需要被避免的情形。
竞争条件分为两类:
- Mutex(互斥):两个或多个进程彼此之间没有内在的制约关系,但是由于要抢占使用某个临界资源(不能被多个进程同时使用的资源,如打印机,变量)而产生制约关系。
- Synchronization(同步):两个或多个进程彼此之间存在内在的制约关系(前一个进程执行完,其他的进程才能执行),如严格轮转法。
要阻止出现竞态条件的关键就是不能让多个进程/线程同时访问那块共享变量。访问共享变量的那段代码就是临界区(critical section)。所有的解决方法都是围绕这个临界区来设计的。
想要成功的解决竞态条件问题,保证程序可以正确的按逻辑顺序运行,从理论上应该满足以下四个条件:
- 不会有两个及以上进程同时出现在他们的critical section。
- 不要做任何关于CPU速度和数量的假设。
- 任何进程在运行到critical section之外时都不能阻塞其他进程。
- 不会有进程永远等在critical section之前。
相关文章
- Graylog4.2+GeoIP2获取SSH暴力破解攻击者IP的地理位置信息
- 【Win 10应用开发】在RichEditBox中使用自定义菜单
- 简单的DC-6靶机渗透实战
- 【Win 10应用开发】使用RichEditBox控件应注意的问题
- HTTP和HTTPS协议,看这一篇就够了
- 跟着老猫来搞GO-内建容器Map
- 【Win10 应用开发】使用“实时可视化树”工具查看应用界面元素
- 干货 |超详细HTTP协议请求报文归纳总结
- 【Win 10应用开发】自定义浮动层——Flyout
- 【Win 10应用开发】AdaptiveTrigger在自定义控件中是可以触发的
- IDC报告:腾讯安全位居中国态势感知领导者地位
- 自学HarmonyOS应用开发(75)- 显示拍摄结果
- 利用pipeline实现GrayLog中用日志源IP地址区分主机
- 【Win10 应用开发】集成文件打开选择器
- HTTP的WEB服务器到底在做些什么?
- web服务组件基础入门笔记小结
- pyinstaller打包exe免杀和逆向浅析
- 涨姿势!那些反弹shell的技巧总结
- 【Win 10应用开发】多窗口视图
- 从绕过安全狗到编写tamper脚本全过程详解