The solution being proposed involves having address spaces be first-class citizens as far as userspace is concerned. Processes should be able to create them, populate them initially and subsequently change them, switch between them,
and destroy them.
The races are eliminated by the fact that a context switch involves switching address spaces rather than switching processes.
The ability of any UML thread to change any UML address space will eliminate the address space scan that's currently needed.