]> gitweb.factorcode.org Git - factor.git/blob - basis/concurrency/flags/flags.factor
ec260961d0417c7ca3a2407d2ba320cb92c2a3be
[factor.git] / basis / concurrency / flags / flags.factor
1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: dlists kernel threads concurrency.conditions accessors ;
4 IN: concurrency.flags
5
6 TUPLE: flag value threads ;
7
8 : <flag> ( -- flag ) f <dlist> flag boa ;
9
10 : raise-flag ( flag -- )
11     dup value>> [ drop ] [ t >>value threads>> notify-all ] if ;
12
13 : wait-for-flag-timeout ( flag timeout -- )
14     over value>> [ 2drop ] [ >r threads>> r> "flag" wait ] if ;
15
16 : wait-for-flag ( flag -- )
17     f wait-for-flag-timeout ;
18
19 : lower-flag ( flag -- )
20     [ wait-for-flag ] [ f >>value drop ] bi ;