Test of write skew with the Michael-Scott queue #41
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a test of write skew with the Michael-Scott queue.
The test runs composed reagents in parallel:
q1
and push toq2
ifq1
was empty.q2
and push toq1
ifq2
was empty.q1
andq2
. If both were non-empty it indicates write skew.The reason for the write skew is that the
try_pop
operation of the Michael-Scott queue performs an "invisible" read when it determines the queue to be empty. An invisible read is performed immediately and is not part of the shared memory accesses that are performed atomically together in a composed reagent. This allows two reagents to simultaneusly find queues to be empty and to push to the other queues. This means that the composed reagents are not strictly serializable (i.e. both linearizable and serializable).