| 454 | } |
| 455 | |
| 456 | void Semaphore::post() { |
| 457 | int wakeup = -1; |
| 458 | internals::ipc_signal_t sig; |
| 459 | _lock.lock(); |
| 460 | if (_head == _tail) { |
| 461 | _value++; |
| 462 | } else { |
| 463 | // don't increment value, as we'll pass that on to the next process. |
| 464 | wakeup = _waiting[_head]; |
| 465 | sig = _signals[_head]; |
| 466 | next(_head); |
| 467 | } |
| 468 | _lock.unlock(); |
| 469 | if (wakeup >= 0) { |
| 470 | internals::send_signal(wakeup, sig); |
| 471 | } |
| 472 | } |
| 473 | |
| 474 | bool Semaphore::try_wait() { |
| 475 | bool result = false; |
no test coverage detected