| 28 | } |
| 29 | |
| 30 | void Semaphore::Acquire(int64 amount) { |
| 31 | CHECK_GE(amount, 0); |
| 32 | |
| 33 | CanAcquireArgs args; |
| 34 | args.semaphore = this; |
| 35 | args.amount = amount; |
| 36 | |
| 37 | mu_.LockWhen(absl::Condition(&CanAcquire, &args)); |
| 38 | value_ -= amount; |
| 39 | mu_.Unlock(); |
| 40 | } |
| 41 | |
| 42 | void Semaphore::Release(int64 amount) { |
| 43 | CHECK_GE(amount, 0); |