import { Mutex } from "./mutex";

export class RwLock {
  private reader: number;
  private writer: boolean;
  private readMutex: Mutex;
  private writeMutex: Mutex;
  private politics: boolean;

  private waitingWriters?: number;
  private readerGate?: Mutex;

  constructor(
    readMutexBuffer: SharedArrayBuffer,
    writeMutexBuffer: SharedArrayBuffer,
    politics?: boolean, // true = fair, false = greedy
  );

  readLock(): void;

  writeLock(): void;

  readUnlock(): void;

  writeUnlock(): void;

  private readLockGreedy(): void;
  private readLockFair(): void;
  private writeLockGreedy(): void;
  private writeLockFair(): void;
}
