fcn reader(fileName,out){ n:=0; foreach line in (File(fileName)) { out.write(line); n+=1; } out.close(); // signal done Atomic.waitFor(out.Property("isOpen")); // wait for other thread to reopen Pipe out.write(n); } fcn writer(in){ Utils.zipWith(fcn(n,line){ "%3d: %s".fmt(n,line).print() },[1..],in); in.open(); // signal other thread to send num lines read println("Other thread read ",in.read()," lines"); } p:=Thread.Pipe(); // NOT Unix pipes, thread safe channel between threads reader.launch("input.txt",p); writer.future(p).noop(); // noop forces eval, ie sleep until writer finished