Condition.hx 729 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package sys.thread;
  2. @:coreApi class Condition {
  3. final cond:eval.luv.Condition;
  4. final mutex:eval.luv.Mutex;
  5. public function new():Void {
  6. cond = eval.luv.Condition.init().resolve();
  7. mutex = eval.luv.Mutex.init(true).resolve();
  8. eval.vm.Gc.finalise(destroy, this);
  9. }
  10. static function destroy(cond:Condition):Void {
  11. cond.cond.destroy();
  12. cond.mutex.destroy();
  13. }
  14. public function acquire():Void {
  15. mutex.lock();
  16. }
  17. public function tryAcquire():Bool {
  18. return mutex.tryLock().isOk();
  19. }
  20. public function release():Void {
  21. mutex.unlock();
  22. }
  23. public function wait():Void {
  24. cond.wait(mutex);
  25. }
  26. public function signal():Void {
  27. cond.signal();
  28. }
  29. public function broadcast():Void {
  30. cond.broadcast();
  31. }
  32. }