Bernstein条件就是讲两个过程如果有数据冲突(Data hazard),那么就没法并行执行。比如过程A生成数据d,而过程B需要输入数据d,那么B就需要A的输入,他们就没法并行执行(写后读问题,RAW)。如果二者会影响后续过程需要的数据,尤其是该数据和他们执行的顺序很有关系,那么他们同样也不能并行执行(写后写问题, WAW)。
例如:p1:y=z+y;p2: z=x+z,假设x=1,y=2,z=3
如果先运行p1,则最后的结果是x=1,y=5,z=4;如果先运行p2,则x=1,y=6,z=4。两次的结果不一样,即程序不可再现,所以p1,p2不能并行的执行。
借用上面的例子,p1:y=z+y,那么p1的读集为 R(p1)={z,y},p1的写集为 W(p1)={y}。
对进程S1、S2,Bernstein条件要求R(S1)∩W(S2)∪W(S1)∩R(S2)∪W(S1)∩W(S2)={}。