update docs and tests for weak cas!
and lock!
operations
#731
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 is intended to close #720.
The
vector-cas!
,box-cas!
, andftype-lock!
operations are "weak" in the sense that they may spuriously fail on an architecture (like AArch64) with a weak memory model. Also, those operation do not necessarily imply any overall memory ordering, so usingmemory-order-acquire
andmemory-order-release
may be needed. The documentation did not make this clear, and some tests did not handle spurious failure.As noted in the discussion for #720, a good case could be made that these operations should be "strong", which could mean both avoiding spurious failure and ensuring more memory ordering. The approach here is conservative: it keeps the current implementation and allows access to the underlying machine's behavior, but it's also compatible with the possibility that we decide to strengthen guarantees in the future.