ref: 2fca1caa1935baf0473efc367e24dab57c52517d
dir: /lib/thread/waitgrp+futex.myr/
use std
use "atomic"
use "futex"
pkg thread =
	type waitgrp = struct
		_val : ftxtag
	;;
	const mkwg : (v : uint32 -> waitgrp)
	const wgwait : (w : waitgrp# -> void)
	const wgpost : (w : waitgrp# -> void)
;;
const mkwg = {v
	-> [._val = (v : ftxtag)]
}
const wgwait = {w
	var v = 0
	while (v = xget(&w._val)) != 0
		ftxwait(&w._val, v, -1)
	;;
}
const wgpost = {w
	var v = xadd(&w._val, -1)
	if v == 1
		ftxwakeall(&w._val)
		-> void
	;;
	std.assert(v > 0, "error: waitgroup underflowed\n")
}