cl-skip-list
cl-skip-list copied to clipboard
Lockless skip lists for Common Lisp; well, for now sbcl 1.0.42 or higher. Contributions for other Lisps welcome. See the README file for a list of what is required.
Concurrent lockless skip lists for Common Lisp.
Currently, "Common Lisp" means SBCL version 1.0.42 or higher. If other Lisps support compare-and-swap and memory barriers, let me know and I will add macros for those Lisps. There is also a need to sort update locations based on some global order, in this case the pointer addresses. SBCL allows that via (logandc2 (sb-kernel:get-lisp-obj-address vector) sb-vm:lowtag-mask)) combined with sb-sys:with-pinned-objects to avoid a GC moving things around. Do other Lisps have similar facilities?
TODO
- Improve performance by reusing CCAS descriptors during the first phase of an MCAS
- Add search fingers
- Add skip list merges
- Add splitting
DONE
- Added a skip-list-based priority queue
- Added memory barriers where necessary, making the code dependent on sbcl 1.0.42