什么是竞态条件
竞态条件是指一个在设备或者系统试图同时执行两个操作的时候出现的不希望的状况,但是由于设备和系统的自然特性,为了正确地执行,操作必须按照合适顺序进行。
竞态条件的发生及后果
在计算机内存或者存储里,如果同时发出读写大量数据的指令的时候竞态条件可能发生,机器试图覆盖相同的或者就的数据,而此时旧的数据仍然在被读取。结果可能是下面一个或者多个情况:计算机死机,出现非法操作提示并结束程序,错误的读取旧的数据,或者错误的写入新数据。在串行的内存和存储访问能防止这种情况,当读写命令同时发生的时候,默认是先执行读操作的。
网络里,竞态条件会在两个用户同时试图访问同一个可用信道的时候发生,在系统同意访问之前没有计算机能得到信道被占用的提示。统计上说这种情况通常是发生在有相当长的延迟时间的网络里,比如使用地球同步卫星。为了防止这种竞态条件发生,需要家里一个优先级列表。比如用户的用户名在字母表里排列靠前可以得到相对较高的优先级。黑客可以利用竞态条件这一弱点来赢得非法访问网络的权利。
当出现如数冲突的时候,逻辑门偶尔发生竞态条件。由于门的输出状态是有限的,相应输入变化的时间是非零值,因此会导致一些不合适的操作。
竞态条件的实例
计算机存储器或者磁碟装置里,如果同时发出大量数据指令的时候,竞争危害可能发生。计算机尝试覆盖相同或者旧的数据,而此时旧的数据仍在被读取。结果可能是下面的一个或者多个情况:机器当机、出现非法操作并结束程序、错误的读取旧数据、或者错误的写入新数据。
网络上,竞争危害会在:多用户同时试图访问同一个可用讯息通道时,产生。在系统同意访问前没有计算机能得到讯息通道被占用的提醒。统计上说这种情况通常发生在极端长延迟时间的网络里,譬如地球同步卫星。解决之道是用户于先预产生优先级列表。然而黑客可以利用这种竞争危害取得非法访问网络的权利。
数字电路,由于逻辑部件输出对输入有一个响应延迟,因此可能在输出上出现一个不希望有的脉冲信号。被称为en:glitch。使用卡诺图以发现并消除这类问题。