use base mutex lock instead of unique_lock in run_task