7. PID Ptr
i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
1~5 delta node
Invalidation Check not yet finished. (Consider as Valid)
Invalid delta node.
Valid delta node.
Node Traverse(lookup) requested by other thread.
Invalidation Check in progress
8. PID Ptr
i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
present_set
i <6, 6>
i <7, 7>
i <6, 6>
i <5, 5>
i <4, 4>
i <3, 3>
i <2, 2>
i <1, 1>
deleted_set
d <5, 5>
d <5, 5>
=
<1, 1>
<2, 2>
<3, 3>
<4, 4>
<5, 5>
<6, 6>
<7, 7>
9. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
Check delta Node 2 & 1
(since node 0 is initial starting point)
2: i <7, 7> => OK
1: i <6, 6> => invariant doesn't hold.
set invalid bit
10. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
present_set
i <6, 6>
i <7, 7>
i <6, 6>
i <5, 5>
i <4, 4>
i <3, 3>
i <2, 2>
i <1, 1>
deleted_set
d <5, 5>
d <5, 5>
=
<1, 1>
<2, 2>
<3, 3>
<4, 4>
<5, 5>
<6, 6>
<7, 7>
11. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
Check delta Node until reaching node 0
(since node 0 is initial starting point)
Both delta node is valid.
12. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
Check delta Node until reaching node 0
(since node 0 is initial starting point)
No matter which node starts
invalidation check first,
node 4 will be checked as valid
and node 5 will set invalid bit.
13. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
present_set
i <6, 6>
i <7, 7>
i <6, 6>
i <5, 5>
i <4, 4>
i <3, 3>
i <2, 2>
i <1, 1>
deleted_set
d <5, 5>
d <5, 5>
=
<1, 1>
<2, 2>
<3, 3>
<4, 4>
<5, 5>
<6, 6>
<7, 7>
14. PID Ptr
0: i <5, 5> i <4, 4> i <3, 3> i <2, 2> i <1, 1>
1: i <6, 6> 2: i <7, 7> 3: i <6, 6> 4: d <5, 5> 5: d <5, 5>
Traverse
<1, 1>
<2, 2>
<3, 3>
<4, 4>
<5, 5>
<6, 6>
<7, 7>
node traverse .
delta node .
e.g.) i <8, 8> & d <8, 8>
<8, 8> : abort i <8, 8>
<8, 8> : abort d <8, 8>