Skip to content

Simple crate with various miscelaneous atomic-related utils

License

Notifications You must be signed in to change notification settings

Aandreba/atomic-utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Crates.io docs.rs GitHub

Atomic Utils

Simple crate with various miscelaneous atomic-related utils

FillQueue

An atomic queue intended for use cases where taking the full contents of the queue is needed.

The queue is, basically, an atomic singly-linked list, where nodes are first allocated and then the list's tail is atomically updated.

When the queue is "chopped", the list's tail is swaped to null, and it's previous tail is used as the base of the [ChopIter]

Performance

The performance of pushing elements is expected to be similar to pushing elements to a SegQueue or Mutex<Vec<_>>, but "chopping" elements is expected to be arround 2 times faster than with a Mutex<Vec<_>>, and 3 times faster than a SegQueue

You can see the benchmark results here

Use FillQueue when:

  • You want a queue that's updateable by shared reference
  • You want to retreive all elements of the queue at once
  • There is no specifically desired order for the elements to be retreived on, or that order is LIFO (Last In First Out)

Don't use FillQueue when:

  • You don't need a queue updateable by shared reference
  • You want to retreive the elements of the queue one by one (see SegQueue)
  • You require the elements in a specific order that isn't LIFO

Features

Name Description Enables Default
std Enables libstd functionality alloc Yes
alloc Enables liballoc functionality Yes (via std)
alloc_api Enables allocator_api functionality alloc & nightly No
futures Enables async/await functionality No
const Enables constant trait implementations No
nightly Enables the use of nightly features Yes

About

Simple crate with various miscelaneous atomic-related utils

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published