Synchronization: Threads.Condition
julia> main()
lock: (threadid, loop_number, sleeptime) = (1, 1, 1sec)
unlock: (threadid, loop_number, sleeptime) = (1, 1, 1sec)
lock: (threadid, loop_number, sleeptime) = (1, 2, 1sec)
unlock: (threadid, loop_number, sleeptime) = (1, 2, 1sec)
lock: (threadid, loop_number, sleeptime) = (1, 3, 1sec)
unlock: (threadid, loop_number, sleeptime) = (1, 3, 1sec)
lock: (threadid, loop_number, sleeptime) = (2, 4, 2sec)
unlock: (threadid, loop_number, sleeptime) = (2, 4, 2sec)
lock: (threadid, loop_number, sleeptime) = (2, 5, 2sec)
unlock: (threadid, loop_number, sleeptime) = (2, 5, 2sec)
lock: (threadid, loop_number, sleeptime) = (2, 6, 2sec)
unlock: (threadid, loop_number, sleeptime) = (2, 6, 2sec)
lock: (threadid, loop_number, sleeptime) = (4, 9, 4sec)
unlock: (threadid, loop_number, sleeptime) = (4, 9, 4sec)
lock: (threadid, loop_number, sleeptime) = (4, 10, 4sec)
unlock: (threadid, loop_number, sleeptime) = (4, 10, 4sec)
lock: (threadid, loop_number, sleeptime) = (3, 7, 3sec)
unlock: (threadid, loop_number, sleeptime) = (3, 7, 3sec)
lock: (threadid, loop_number, sleeptime) = (3, 8, 3sec)
unlock: (threadid, loop_number, sleeptime) = (3, 8, 3sec)