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