factor/extra/concurrency/exchangers/exchangers.factor

22 lines
648 B
Factor
Raw Normal View History

2008-02-18 06:07:40 -05:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel threads boxes ;
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
TUPLE: exchanger thread object ;
2008-02-18 06:07:40 -05:00
: <exchanger> ( -- exchanger )
<box> <box> exchanger construct-boa ;
2008-02-18 06:07:40 -05:00
: exchange ( obj exchanger -- newobj )
dup exchanger-thread box-full? [
dup exchanger-object box>
>r exchanger-thread box> resume-with r>
2008-02-18 06:07:40 -05:00
] [
[ exchanger-object >box ] keep
2008-02-21 00:13:31 -05:00
[ exchanger-thread >box ] curry "exchange" suspend
2008-02-18 06:07:40 -05:00
] if ;