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.
I was looking to see if I could replace the
Mutex<VecDeque<T>>
from the deadpool crate, but there's an interesting requirement here - deadpool has aresize
method that can resize the queue.Not to be deterred, I am hoping to use a
RwLock<ArrayQueue<T>>
. 99% of ops will callslots.read().pop()
, but for the resize function, I was intending to useslots.write()
to get sole ownership, then I couldmem::swap
in a new queue. This would be fine, but I thought it could be more efficient.This PR introduces an efficient implementation of some of the sync (
&mut self
) operations for inserting into the queue, as well as that resize method.pop_sync
,push_sync
,force_push_sync
are much like their shared counterparts, except they don't need to care about atomic load orderings. (I'm open to alternative namings)resize
is a little more complicated: