競合状態
ファイルシステムにおけるファイルロックは一般的解決法を提供する。もっと面倒だが根本的な解決策としては、あるファイルについてひとつのプロセスが排他的なアクセス権を持ち(デーモンのような動作をする)、他のプロセスがそのファイルにアクセスしたいときはプロセス間通信でそのプロセスに依頼するという方式が考えられる(もちろん、その際にプロセスレベルの同期が必要である)。
述語(例えば認証のための真理値を返す演算子か関数)のチェックと使用にかかわる競合状態というものがある。チェック時点と使用時点で状態を変更できるなら、競合状態が発生する。このような競合状態を発生させるバグがコンピュータセキュリティに関わるコードに存在すると、セキュリティホールになる可能性がある。例えば、ファイルのアクセス権をチェックした後で実際のファイルオープンをする場合(あくまでもオペレーティングシステム内のこと)、チェックとオープンの間にファイルをすりかえる(例えばシンボリックリンクにする)と通常アクセスできないファイルにアクセスできる(これは、オペレーティングシステムにバグがある場合の話であって、一般に可能という話ではない)。
競合状態が致命的な問題を引き起こした事例として、放射線療法機器セラック25(Therac-25)の事故がある。この装置の制御をつかさどるリアルタイムOSには、競合状態によって引き起こされるバグが存在していたが、この判明しにくいバグが原因で、操作コマンドを素早く打ち込んだ場合、セラック25ではX線用の金属製ターゲットをきちんと配置しないまま高エネルギーの放射線を照射する設定が可能になっていた。そもそもこの装置は、従来機に搭載されていた電気機械式の安全保護装置(ハードウェア・インターロック)を取り除いてソフトウェア制御に置き換えてしまっていた。結果として顕在化したソフトウェアのバグが牙をむき出し、6件の重大な被ばく事故を引き起こし、5人の患者が死亡することになった。
他の例として、オハイオ州の FirstEnergy 社の電力管理システムの事故がある。このシステムは警報装置に競合状態を発生する問題があった。3本のたるんだ送電線が同時に外されたとき、競合状態が発生して監視要員に警報が届かなかった。このソフトウェア上の問題によって2003年北アメリカ大停電が発生した。