here I learn things about mutex and sync, which is quite difficult...