Skip to content

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.

License

Notifications You must be signed in to change notification settings

kraison/cl-skip-list

Repository files navigation

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
1. Improve performance by reusing CCAS descriptors during the first phase of an MCAS
2. Add search fingers
2. Add skip list merges
3. Add splitting

DONE
1. Added a skip-list-based priority queue
2. Added memory barriers where necessary, making the code dependent on sbcl 1.0.42

About

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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published