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