add double checked locking