27 lines
		
	
	
		
			856 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			27 lines
		
	
	
		
			856 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: deques threads kernel arrays sequences alarms ;
 | 
						|
IN: concurrency.conditions
 | 
						|
 | 
						|
: notify-1 ( deque -- )
 | 
						|
    dup deque-empty? [ drop ] [ pop-back resume-now ] if ;
 | 
						|
 | 
						|
: notify-all ( deque -- )
 | 
						|
    [ resume-now ] slurp-deque ;
 | 
						|
 | 
						|
: queue-timeout ( queue timeout -- alarm )
 | 
						|
    #! Add an alarm which removes the current thread from the
 | 
						|
    #! queue, and resumes it, passing it a value of t.
 | 
						|
    >r [ self swap push-front* ] keep [
 | 
						|
        [ delete-node ] [ drop node-value ] 2bi
 | 
						|
        t swap resume-with
 | 
						|
    ] 2curry r> later ;
 | 
						|
 | 
						|
: wait ( queue timeout status -- )
 | 
						|
    over [
 | 
						|
        >r queue-timeout [ drop ] r> suspend
 | 
						|
        [ "Timeout" throw ] [ cancel-alarm ] if
 | 
						|
    ] [
 | 
						|
        >r drop [ push-front ] curry r> suspend drop
 | 
						|
    ] if ;
 |