39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2008 Slava Pestov.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: help.markup help.syntax ;
							 | 
						||
| 
								 | 
							
								IN: concurrency.flags
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HELP: flag
							 | 
						||
| 
								 | 
							
								{ $class-description "A flag allows one thread to notify another when a condition is satisfied." } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HELP: <flag>
							 | 
						||
| 
								 | 
							
								{ $values { "flag" flag } }
							 | 
						||
| 
								 | 
							
								{ $description "Creates a new flag." } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HELP: raise-flag
							 | 
						||
| 
								 | 
							
								{ $values { "flag" flag } }
							 | 
						||
| 
								 | 
							
								{ $description "Raises a flag, notifying any threads waiting on it. Does nothing if the flag has already been raised." } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HELP: wait-for-flag
							 | 
						||
| 
								 | 
							
								{ $values { "flag" flag } }
							 | 
						||
| 
								 | 
							
								{ $description "Waits for a flag to be raised. If the flag has already been raised, returns immediately." } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								HELP: lower-flag
							 | 
						||
| 
								 | 
							
								{ $values { "flag" flag } }
							 | 
						||
| 
								 | 
							
								{ $description "Attempts to lower a flag. If the flag has been raised previously, returns immediately, otherwise waits for it to be raised first." } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ARTICLE: "concurrency.flags" "Flags"
							 | 
						||
| 
								 | 
							
								"A " { $emphasis "flag" } " is a condition notification device which can be in one of two states: " { $emphasis "lowered" } " (the initial state) or " { $emphasis "raised" } "."
							 | 
						||
| 
								 | 
							
								$nl
							 | 
						||
| 
								 | 
							
								"The flag can be raised at any time; raising a raised flag does nothing. Lowering a flag if it has not been raised yet will wait for another thread to raise the flag."
							 | 
						||
| 
								 | 
							
								$nl
							 | 
						||
| 
								 | 
							
								"Essentially, a flag can be thought of as a counting semaphore where the count never goes above one."
							 | 
						||
| 
								 | 
							
								{ $subsection flag }
							 | 
						||
| 
								 | 
							
								{ $subsection flag? }
							 | 
						||
| 
								 | 
							
								"Waiting for a flag to be raised:"
							 | 
						||
| 
								 | 
							
								{ $subsection raise-flag }
							 | 
						||
| 
								 | 
							
								{ $subsection wait-for-flag }
							 | 
						||
| 
								 | 
							
								{ $subsection lower-flag } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ABOUT: "concurrency.flags"
							 |