]> gitweb.factorcode.org Git - factor.git/blob - basis/concurrency/exchangers/exchangers.factor
core, basis, extra: Remove DOS line endings from files.
[factor.git] / basis / concurrency / exchangers / exchangers.factor
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
5
6 ! Motivated by
7 ! http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Exchanger.html
8
9 TUPLE: exchanger thread object ;
10
11 : <exchanger> ( -- exchanger )
12     <box> <box> exchanger boa ;
13
14 : exchange ( obj exchanger -- newobj )
15     dup thread>> occupied>> [
16         dup object>> box>
17         [ thread>> box> resume-with ] dip
18     ] [
19         [ object>> >box ] keep
20         [ self ] dip thread>> >box
21         "exchange" suspend
22     ] if ;