以下代码应该容易受到 TOCTOU 攻击:
public Period(final Date start, final Date end) {
if (start.compare(end) > 0) {
throw new IllegalArgumentException("");
}
this.start = start;
this.end = end; // Class period has 2 private final member
// variables Date start & end.
}
我不明白的是,这种竞争条件将如何运作?假设有 2 个线程 T1 和 T2,其中 T1 有一组有效的参数并且应该通过检查,而 T2 是想要在类中设置无效值的黑客。
如果有 2 个线程在竞争并且这段代码是我们的关键部分,那么说 T1 运行通过了检查并进入睡眠状态。现在当 T2 开始运行时,它不会再次通过检查(并失败)吗?