main 1 sub 1 main 2 sub 2 main 3 wait: wait start wait end end waiting value produced after some time: 42 non-blocking goroutine done with non-blocking goroutine async interface method call slept inside func pointer 8 slept inside closure, with value: 20 8 closure go call result: 1 pre-acquired mutex releasing mutex acquired mutex from goroutine released mutex from goroutine re-acquired mutex done