2008-02-18 06:07:40 -05:00
|
|
|
! Copyright (C) 2008 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-05-15 01:03:21 -04:00
|
|
|
USING: kernel threads boxes accessors ;
|
2008-02-18 06:07:40 -05:00
|
|
|
IN: concurrency.exchangers
|
|
|
|
|
|
|
|
! Motivated by
|
|
|
|
! http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Exchanger.html
|
|
|
|
|
2008-02-18 17:20:18 -05:00
|
|
|
TUPLE: exchanger thread object ;
|
2008-02-18 06:07:40 -05:00
|
|
|
|
|
|
|
: <exchanger> ( -- exchanger )
|
2008-04-13 16:06:27 -04:00
|
|
|
<box> <box> exchanger boa ;
|
2008-02-18 06:07:40 -05:00
|
|
|
|
|
|
|
: exchange ( obj exchanger -- newobj )
|
2008-05-15 01:03:21 -04:00
|
|
|
dup thread>> occupied>> [
|
|
|
|
dup object>> box>
|
|
|
|
>r thread>> box> resume-with r>
|
2008-02-18 06:07:40 -05:00
|
|
|
] [
|
2008-05-15 01:03:21 -04:00
|
|
|
[ object>> >box ] keep
|
|
|
|
[ thread>> >box ] curry "exchange" suspend
|
2008-02-18 06:07:40 -05:00
|
|
|
] if ;
|