$mutex->check(function () use ($bankAccount, $amount) {
return $bankAccount->getBalance() >= $amount;
})->then(function () use ($bankAccount, $amount) {
$bankAccount->withdraw($amount);
});
public function check(callable $check)
{
$doubleCheckedLocking = new DoubleCheckedLocking($this);
$doubleCheckedLocking->setCheck($check);
return $doubleCheckedLocking;
}