]> gitweb.factorcode.org Git - factor.git/blob - basis/concurrency/conditions/conditions.factor
Fix permission bits
[factor.git] / basis / concurrency / conditions / conditions.factor
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: deques threads kernel arrays sequences alarms ;\r
4 IN: concurrency.conditions\r
5 \r
6 : notify-1 ( deque -- )\r
7     dup deque-empty? [ drop ] [ pop-back resume-now ] if ;\r
8 \r
9 : notify-all ( deque -- )\r
10     [ resume-now ] slurp-deque ;\r
11 \r
12 : queue-timeout ( queue timeout -- alarm )\r
13     #! Add an alarm which removes the current thread from the\r
14     #! queue, and resumes it, passing it a value of t.\r
15     >r [ self swap push-front* ] keep [\r
16         [ delete-node ] [ drop node-value ] 2bi\r
17         t swap resume-with\r
18     ] 2curry r> later ;\r
19 \r
20 : wait ( queue timeout status -- )\r
21     over [\r
22         >r queue-timeout [ drop ] r> suspend\r
23         [ "Timeout" throw ] [ cancel-alarm ] if\r
24     ] [\r
25         >r drop [ push-front ] curry r> suspend drop\r
26     ] if ;\r