1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package sys.thread;
- @:coreApi class Condition {
- final cond:eval.luv.Condition;
- final mutex:eval.luv.Mutex;
- public function new():Void {
- cond = eval.luv.Condition.init().resolve();
- mutex = eval.luv.Mutex.init(true).resolve();
- eval.vm.Gc.finalise(destroy, this);
- }
- static function destroy(cond:Condition):Void {
- cond.cond.destroy();
- cond.mutex.destroy();
- }
- public function acquire():Void {
- mutex.lock();
- }
- public function tryAcquire():Bool {
- return mutex.tryLock().isOk();
- }
- public function release():Void {
- mutex.unlock();
- }
- public function wait():Void {
- cond.wait(mutex);
- }
- public function signal():Void {
- cond.signal();
- }
- public function broadcast():Void {
- cond.broadcast();
- }
- }
|