// synchronized sclass SeenAndQueue { Set seen = syncSet(); L queue = syncLinkedList(); // L transient L onAddedToQueue; bool add(A a) { if (!seen.add(a)) false; queue.add(a); pcallFAll(onAddedToQueue, a); true; } A popQueue() { ret syncPopFirst(queue); } }