add mutex
add guard