I'm experimenting with writing some bindings to the Boehm GC for Rust.
Some background: Rust is designed to be a high-concurrent language, and a result of this design is having the ability to statically restrict GC pointers to within the threads in which they were allocated (that is, a GC pointer allocated in thread x can never be kept alive (or even referenced at all) by another thread).
Hence, I wish to drive Boehm to capitalise on this for performance as much as possible:
1 is easy, but I can't find any facility for 2 and 3. The most important part is 1 & 2 because I want to be able to have threads running in the background, independently of what the other threads are doing (even if they are all allocating and garbage-collecting gigabytes of memory).
(I do know about THREAD_LOCAL_ALLOC
& gc_thread_local.h
, but that doesn't quite satisfy 3 fully, it just makes it more efficient, but it is still valid to transfer the pointers allocated thread-locally between threads, while I don't need that guarantee.)
I don't have an answer about how to do this with Boehm. However, here are two GCs which seem to have enough control and encapsulation to have a totally independent GC context per-thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With