Owns all allocations and creates objects. All objects have
a lifetime tied to the borrow of their Context. When the
Context goes out of scope, no objects should be accessible.
Thread-safe version of RootSet that uses Mutex instead of RefCell.
This is specifically designed for multi-threaded scenarios like ChannelManager
where roots need to be managed across thread boundaries.
Perform garbage collection on a block with a root set without requiring a Context.
This is useful for scenarios like ChannelManager where we need to GC a shared block
from any thread without conflicting with thread-local Context singleton checks.