import { ILockable } from "../base/thread/ILockable";
export function sleep_for(ms: number): Promise<void>{ return new Promise<void>(resolve => { setTimeout(resolve, ms); });}
export function sleep_until(at: Date): Promise<void>{ let now: Date = new Date(); let ms: number = at.getTime() - now.getTime();
return sleep_for(ms); }
export async function lock(...items: Pick<ILockable, "lock">[]): Promise<void>{ let promises: Promise<void>[] = []; for (let mtx of items) promises.push(mtx.lock());
await Promise.all(promises);}
export async function try_lock(...items: Pick<ILockable, "try_lock">[]): Promise<number>{ for (let i: number = 0; i < items.length; ++i) if (await items[i].try_lock() === false) return i;
return -1;}