| 31 | Mutex() : data(new Data()) {} |
| 32 | |
| 33 | Future<Nothing> lock() |
| 34 | { |
| 35 | Future<Nothing> future = Nothing(); |
| 36 | |
| 37 | synchronized (data->lock) { |
| 38 | if (!data->locked) { |
| 39 | data->locked = true; |
| 40 | } else { |
| 41 | Promise<Nothing> waiter; |
| 42 | future = waiter.future(); |
| 43 | data->waiters.push(std::move(waiter)); |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | return future; |
| 48 | } |
| 49 | |
| 50 | void unlock() |
| 51 | { |