1 ! Copyright (C) 2008 Slava Pestov.
\r
2 ! See http://factorcode.org/license.txt for BSD license.
\r
3 USING: kernel threads boxes accessors ;
\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 >r thread>> box> resume-with r>
\r
19 [ object>> >box ] keep
\r
20 [ thread>> >box ] curry "exchange" suspend
\r