Thanks @James. Here is the solution I ended up with:
The mutex method seemed promising, but most mutexes expect the resulting thread and thread release to be the same. In the end, I had a Semaphore Creator with a zero on the stack, pass the pointer to the semaphore to the king, release King, and then try to acquire the semaphore. The score is zero, so the Heir immediately blocks. When the destructor of the king is called, it calls "release" on the semaphore. This is similar to working with the Rogue Wave semaphore.
brianegge
source share