
竞争冒险
跳到导航
跳到搜索
![]() |
竞争冒险(race hazard)又名竞态条件、竞争条件(race condition),它旨在描述一个系统或者进程的输出依赖于不受控制的事件出现顺序或者出现时机。此词源自于两个信号试着彼此竞争,来影响谁先输出。
举例来说,如果计算机中的两个进程同时试图修改一个共享内存的内容,在没有并发控制的情况下,最后的结果依赖于两个进程的执行顺序与时机。而且如果发生了并发访问冲突,则最后的结果是不正确的。
竞争冒险常见于不良设计的电子系统,尤其是逻辑电路。但它们在软件中也比较常见,尤其是有采用多线程技术的软件。
实例[编辑]
- 计算机存储器或者磁盘设备里,如果同时发出大量数据指令的时候,竞争冒险可能发生。计算机尝试覆盖相同或者旧的数据,而此时旧的数据仍在被读取。结果可能是下面的一个或者多个情况:机器死机、出现非法操作并退出程序、错误的读取旧数据、或者错误的写入新数据。
- 网络上,竞争冒险会在:多用户同时试图访问同一个可用消息沟道时,产生。在系统同意访问前没有计算机能得到消息沟道被占用的提醒。统计上说这种情况通常发生在极端长延迟时间的网络里,譬如地球同步卫星。解决之道是用户预先产生优先级列表。然而黑客可以利用这种竞争冒险获取非法访问网络的权利。
- 数字电路,由于逻辑部件输出对输入有一个响应延迟,因此可能在输出上出现一个不希望有的脉冲信号。被称为Electronics glitch。使用卡诺图以发现并消除这类问题。

逻辑电路中的竞态条件.这里,∆t1与∆t2表示逻辑单元的传播延迟.当输入值(A)改变,电路输出有一个很短的峰持续(∆t1+∆t2) - ∆t2 = ∆t1.
参见[编辑]
外部链接[编辑]
- Starvation and Critical Race Analyzers for Ada in IEEE Transactions on Software Engineering, August 1990 (vol. 16 no. 8) pp. 829–843 by G.M. Karam and R.J.A. Buhr
- Paper "Algorithms for the Optimal State Assignment of Asynchronous State Machines (页面存档备份,存于互联网档案馆)" by Robert M. Fuhrer , Bill Lin and Steven M. Nowick
- Paper "A Novel Framework for Solving the State Assignment Problem for Event-Based Specifications (页面存档备份,存于互联网档案馆)" by Luciano Lavagno , Cho W. Moon , Robert K. Brayton and Alberto Sangiovanni-Vincentelli
- Article "Secure programmer: Prevent race conditions—Resource contention can be used against you (页面存档备份,存于互联网档案馆)" by David A. Wheeler
- Chapter "Avoid Race Conditions (页面存档备份,存于互联网档案馆)"(Secure Programming for Linux and Unix HOWTO)
- Race conditions, security, and immutability in Java, with sample source code and comparison to C code, by Chiral Software
- Interview with Dmitriy Vyukov - the author of Relacy Race Detector (RRD)