Make monitor::run protected, add a public monitor::start and add a mutex to guard the run invocation from the start method.
Update dependent code after monitor API change.