本文以论文“FastTrack”中的一张图片为材料,分析时钟向量的使用方法。论文如下:
https://users.soe.ucsc.edu/~cormac/papers/pldi09.pdf
图片如下:
C0表示线程0的时钟向量,对应第0列为线程0的时间戳
C1表示线程0的时钟向量,对应第1列为线程1的时间戳
lm表示锁m的时钟向量,对应的每一列为该线程号的时间戳
Wx表示变量x的时钟向量,对应的每一列为该线程号的时间戳
第一行为初始化,或者可以理解为经过某些操作之后达到该状态,此时,0号线程时间戳为4,1号线程时间戳为8,且仅各自对应的时钟向量有记录。
wr(0,x)表示线程0对变量x进行了写操作,Wx记录了线程0对其修改。
rel(0,m)表示线程0释放了锁m,lm记录线程0对其修改,C0对应的时间戳自加1,本文先记录后修改时间戳。
acq(1,m)表示线程1申请锁m,复制其他线程对锁m的操作,即其他线程的时间戳。
wr(1,x)表示线程1对变量x进行了写操作,Wx记录了线程1对其修改。
从文中图片中可以看出<4,8,…>每一分量都不小于<4,0,…>,所以<4,8,…>之后的操作一定在<4,0,…>之后发生,是happen-before的。
除此之外,从某些向量的数值中可以看出,例如<5,0,…>与<0,8,…>相比数值有大有小,所有这两点是可以并发的。允许出现数据竞争等并发缺陷。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删