Mark your setTime as shared, then cast away shared (as you don't need atomics once it's locked), and assign:synchronized setTime(ref SysTime t) shared { (cast()this).time = t; }
I know I can make it work by casting, my question is:we had a lock on the owning shared object already, WHY we still need the cast to make it compile.