| Crates.io | rcu_list |
| lib.rs | rcu_list |
| version | 0.1.1 |
| created_at | 2024-12-19 01:48:34.228897+00 |
| updated_at | 2024-12-19 07:51:09.604277+00 |
| description | a lockless concurrent list implementation |
| homepage | https://github.com/Xudong-Huang/rcu_list |
| repository | https://github.com/Xudong-Huang/rcu_list |
| max_upload_size | |
| id | 1488688 |
| size | 55,078 |
This is a concurrent linked list implementation in Rust using RcuCell.
There are two types of linked list: SignleLinkedList and DoubleLinkedList.
The SingleLinkedList supports the following operations:
front: Get the head entry of list.back: Get the tail entry of list.push_front: Insert a new element into the head of list.pop_front: Remove the element from the head of list.push_back: Insert a new element into the tail of list.iter: Iterate over the list.each Entry that returned by instert operations could do the following operations:
deref: Read the value of the current element.The DoubleLinkedList supports the following operations:
front: Get the head entry of list.back: Get the tail entry of list.push_front: Insert a new element into the head of list.pop_front: Remove the element from the head of list.push_back: Insert a new element into the tail of list.pop_back: Remove the element from the tail of list.iter: Iterate over the list.each Entry that returned by insert operations could do the following operations:
remove: Remove the current element from the list.insert_after: Insert an element after the entry.insert_ahead: Insert an element ahead the entry.remove_after: Remove the element after the entry.remove_ahead: Remove the element ahead the entry.deref: Read the value of the current element.is_removed: Check if the element is removed from the list.next: Get the next entry in the list.Any write operations like insert/remove on a removed Entry would just fail.
But it's safe to read(deref) the value of a removed Entry.
push_front has better performance than push_back, because it doesn't need to lock the previous element.pop_front has better performance than pop_back, because it doesn't need to lock the previous element.pop_back could result more efficient memory recycle than pop_front, because it less likely hold the next element.push_front and push_back only need to lock one element.pop_front and pop_back need to lock two elements.Entry for a long time, the drop may recursively drop next elements and cause a stack overflow.