ref: 0d7d70e5b1a4b5c7ae618d6d04fb30848b18c08f
dir: /lib/thread/future.myr/
use std use "sem" pkg thread = type future(@a) = struct sem : sem val : @a ;; generic mkfut : (-> future(@a)#) generic futput : (fut : future(@a)#, val : @a -> void) generic futget : (fut : future(@a)# -> @a) ;; generic mkfut = { -> std.mk([.sem = mksem(0)]) } generic futput = {fut, val fut.val = val sempost(&fut.sem) } generic futget = {fut var val semwait(&fut.sem) val = fut.val std.free(fut) -> val }