| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  | ! Copyright (C) 2008 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-11-30 19:28:15 -05:00
										 |  |  | USING: kernel threads boxes accessors fry ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  | IN: concurrency.exchangers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! Motivated by | 
					
						
							|  |  |  | ! http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Exchanger.html | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-18 17:20:18 -05:00
										 |  |  | TUPLE: exchanger thread object ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : <exchanger> ( -- exchanger )
 | 
					
						
							| 
									
										
										
										
											2008-04-13 16:06:27 -04:00
										 |  |  |     <box> <box> exchanger boa ;
 | 
					
						
							| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : exchange ( obj exchanger -- newobj )
 | 
					
						
							| 
									
										
										
										
											2008-05-15 01:03:21 -04:00
										 |  |  |     dup thread>> occupied>> [ | 
					
						
							|  |  |  |         dup object>> box> | 
					
						
							| 
									
										
										
										
											2008-11-30 19:28:15 -05:00
										 |  |  |         [ thread>> box> resume-with ] dip
 | 
					
						
							| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  |     ] [ | 
					
						
							| 
									
										
										
										
											2008-05-15 01:03:21 -04:00
										 |  |  |         [ object>> >box ] keep
 | 
					
						
							| 
									
										
										
										
											2008-11-30 19:28:15 -05:00
										 |  |  |         '[ _ thread>> >box ] "exchange" suspend | 
					
						
							| 
									
										
										
										
											2008-02-18 06:07:40 -05:00
										 |  |  |     ] if ;
 |