1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
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();
}
}
|