<Li> Atomically: <Dl> <Dd> <Ol> <Li> release the mutex m, </Li> <Li> move this thread from the "running" to c' s "wait - queue" (a.k.a. "sleep - queue") of threads, and </Li> <Li> sleep this thread . (Context is synchronously yielded to another thread .) </Li> </Ol> </Dd> </Dl> </Li> <Dl> <Dd> <Ol> <Li> release the mutex m, </Li> <Li> move this thread from the "running" to c' s "wait - queue" (a.k.a. "sleep - queue") of threads, and </Li> <Li> sleep this thread . (Context is synchronously yielded to another thread .) </Li> </Ol> </Dd> </Dl> <Dd> <Ol> <Li> release the mutex m, </Li> <Li> move this thread from the "running" to c' s "wait - queue" (a.k.a. "sleep - queue") of threads, and </Li> <Li> sleep this thread . (Context is synchronously yielded to another thread .) </Li> </Ol> </Dd> <Ol> <Li> release the mutex m, </Li> <Li> move this thread from the "running" to c' s "wait - queue" (a.k.a. "sleep - queue") of threads, and </Li> <Li> sleep this thread . (Context is synchronously yielded to another thread .) </Li> </Ol>

What happens if a monitor procedure calls another procedure in the same monitor