var searchIndex = {}; searchIndex["crossbeam"] = {"doc":"Support for concurrent and parallel programming.","items":[[3,"Scope","crossbeam","",null,null],[3,"ScopedJoinHandle","","A handle to a scoped thread",null,null],[5,"scope","","Create a new `scope`, for deferred destructors.",null,{"inputs":[{"name":"f"}],"output":{"name":"r"}}],[5,"spawn_unsafe","","Like `std::thread::spawn`, but without the closure bounds.",null,{"inputs":[{"name":"f"}],"output":{"name":"joinhandle"}}],[0,"mem","","Memory management for concurrent data structures",null,null],[3,"CachePadded","crossbeam::mem","Pad `T` to the length of a cacheline.",null,null],[0,"epoch","","Epoch-based memory management",null,null],[3,"Owned","crossbeam::mem::epoch","Like `Box<T>`: an owned, heap-allocated data value of type `T`.",null,null],[3,"Shared","","Like `&'a T`: a shared reference valid for lifetime `'a`.",null,null],[3,"Atomic","","Like `std::sync::atomic::AtomicPtr`.",null,null],[3,"Guard","","An RAII-style guard for pinning the current epoch.",null,null],[5,"pin","","Pin the current epoch.",null,{"inputs":[],"output":{"name":"guard"}}],[11,"new","","Move `t` to a new heap allocation.",0,{"inputs":[{"name":"t"}],"output":{"name":"owned"}}],[11,"into_inner","","Move data out of the owned box, deallocating the box.",0,null],[11,"deref","","",0,null],[11,"deref_mut","","",0,null],[11,"eq","","",1,null],[11,"ne","","",1,null],[11,"clone","","",1,null],[11,"deref","","",1,null],[11,"as_raw","","",1,null],[11,"null","","",2,{"inputs":[],"output":{"name":"atomic"}}],[11,"new","","Create a new atomic pointer",2,{"inputs":[{"name":"t"}],"output":{"name":"atomic"}}],[11,"load","","Do an atomic load with the given memory ordering.",2,null],[11,"store","","Do an atomic store with the given memory ordering.",2,null],[11,"store_and_ref","","Do an atomic store with the given memory ordering, immediately yielding\na shared reference to the pointer that was stored.",2,null],[11,"store_shared","","Do an atomic store of a `Shared` pointer with the given memory ordering.",2,null],[11,"cas","","Do a compare-and-set from a `Shared` to an `Owned` pointer with the\ngiven memory ordering.",2,null],[11,"cas_and_ref","","Do a compare-and-set from a `Shared` to an `Owned` pointer with the\ngiven memory ordering, immediatley acquiring a new `Shared` reference to\nthe previously-owned pointer if successful.",2,null],[11,"cas_shared","","Do a compare-and-set from a `Shared` to another `Shared` pointer with\nthe given memory ordering.",2,null],[11,"swap","","Do an atomic swap with an `Owned` pointer with the given memory ordering.",2,null],[11,"swap_shared","","Do an atomic swap with a `Shared` pointer with the given memory ordering.",2,null],[11,"unlinked","","Assert that the value is no longer reachable from a lock-free data\nstructure and should be collected when sufficient epochs have passed.",3,null],[11,"migrate_garbage","","Move the thread-local garbage into the global set of garbage.",3,null],[11,"drop","","",3,null],[11,"zeroed","crossbeam::mem","A const fn equivalent to mem::zeroed().",4,{"inputs":[],"output":{"name":"cachepadded"}}],[11,"new","","Wrap `t` with cacheline padding.",4,{"inputs":[{"name":"t"}],"output":{"name":"cachepadded"}}],[11,"deref","","",4,null],[11,"deref_mut","","",4,null],[8,"ZerosValid","","Types for which mem::zeroed() is safe.",null,null],[0,"sync","crossbeam","Synchronization primitives.",null,null],[3,"MsQueue","crossbeam::sync","A Michael-Scott lock-free queue, with support for blocking `pop`s.",null,null],[3,"AtomicOption","","",null,null],[3,"TreiberStack","","Treiber's lock-free stack.",null,null],[3,"SegQueue","","A Michael-Scott queue that allocates "segments" (arrays of nodes)\nfor efficiency.",null,null],[11,"new","","",5,{"inputs":[],"output":{"name":"atomicoption"}}],[11,"swap_box","","",5,null],[11,"swap","","",5,null],[11,"take","","",5,null],[11,"new","","Create a new, empty queue.",6,{"inputs":[],"output":{"name":"msqueue"}}],[11,"push","","Add `t` to the back of the queue, possibly waking up threads\nblocked on `pop`.",6,null],[11,"is_empty","","Check if this queue is empty.",6,null],[11,"try_pop","","Attempt to dequeue from the front.",6,null],[11,"pop","","Dequeue an element from the front of the queue, blocking if the queue is\nempty.",6,null],[11,"new","","Create a new, empty stack.",7,{"inputs":[],"output":{"name":"treiberstack"}}],[11,"push","","Push `t` on top of the stack.",7,null],[11,"pop","","Attempt to pop the top element of the stack.",7,null],[11,"is_empty","","Check if this queue is empty.",7,null],[11,"new","","Create a new, empty queue.",8,{"inputs":[],"output":{"name":"segqueue"}}],[11,"push","","Add `t` to the back of the queue.",8,null],[11,"try_pop","","Attempt to dequeue from the front.",8,null],[0,"chase_lev","","A lock-free concurrent work-stealing deque",null,null],[3,"Worker","crossbeam::sync::chase_lev","Worker half of the work-stealing deque. This worker has exclusive access to\none side of the deque, and uses `push` and `try_pop` method to manipulate it.",null,null],[3,"Stealer","","The stealing half of the work-stealing deque. Stealers have access to the\nopposite end of the deque from the worker, and they only have access to the\n`steal` method.",null,null],[4,"Steal","","When stealing some data, this is an enumeration of the possible outcomes.",null,null],[13,"Empty","","The deque was empty at the time of stealing",9,null],[13,"Abort","","The stealer lost the race for stealing data, and a retry may return more\ndata.",9,null],[13,"Data","","The stealer has successfully stolen some data.",9,null],[5,"deque","","Creates a new empty deque",null,null],[11,"fmt","","",9,null],[11,"eq","","",9,null],[11,"ne","","",9,null],[11,"push","","Pushes data onto the front of this work queue.",10,null],[11,"try_pop","","Pops data off the front of the work queue, returning `None` on an empty\nqueue.",10,null],[11,"steal","","Steals work off the end of the queue (opposite of the worker's end)",11,null],[11,"clone","","",11,null],[11,"defer","crossbeam","Schedule code to be executed when exiting the scope.",12,null],[11,"spawn","","Create a scoped thread.",12,null],[11,"join","","Join the scoped thread, returning the result it produced.",13,null],[11,"thread","","Get the underlying thread handle.",13,null],[11,"drop","","",12,null]],"paths":[[3,"Owned"],[3,"Shared"],[3,"Atomic"],[3,"Guard"],[3,"CachePadded"],[3,"AtomicOption"],[3,"MsQueue"],[3,"TreiberStack"],[3,"SegQueue"],[4,"Steal"],[3,"Worker"],[3,"Stealer"],[3,"Scope"],[3,"ScopedJoinHandle"]]}; initSearch(searchIndex);