How should we expose synchronization primitives to implement a lock-free executor for real-time execution?