| 123456789101112131415161718192021222324252627282930313233343536 | package sys.thread;@:coreApi class Semaphore {	final native:eval.luv.Semaphore;	public function new(value:Int):Void {		native = eval.luv.Semaphore.init(value).resolve();		eval.vm.Gc.finalise(destroy, this);	}    static function destroy(sem:Semaphore):Void {        sem.native.destroy();    }	public function acquire():Void {		native.wait();	}	public function tryAcquire(?timeout:Float):Bool {		if (timeout == null) {			return native.tryWait().isOk();		} else {			var t = Sys.time() + timeout;			while (Sys.time() < t) {				if (native.tryWait().isOk()) {					return true;				}			}			return false;		}	}	public function release():Void {		native.post();	}}
 |