First draft of implementing a new blocking queue #207
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 queue is implemented using a pair of modified unpadded MpmcUnboundedXaddArrayQueues from JCTools.
One queue is used for messages, while another is used for the wait-set. Since the wait-set is a queue, we get fairness from our blocking methods.
A few modifications were necessary, in order to implement a wait-set using the queue. Most importantly, the 'offer' method now returns the claimed producer index, and a pair of 'casEntry' and 'hasEntry' methods has been added, which allow blocking threads to manage their wait-set entries.
The queues have also gotten a 'count' method, which allow us to implement some inspection methods that Stormpot needs.