1 ! Copyright (C) 2008, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel threads boxes accessors fry ;
4 IN: concurrency.exchangers
7 ! http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Exchanger.html
9 TUPLE: exchanger thread object ;
11 : <exchanger> ( -- exchanger )
12 <box> <box> exchanger boa ;
14 : exchange ( obj exchanger -- newobj )
15 dup thread>> occupied>> [
17 [ thread>> box> resume-with ] dip
19 [ object>> >box ] keep
20 [ self ] dip thread>> >box