22 lines
		
	
	
		
			609 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			22 lines
		
	
	
		
			609 B
		
	
	
	
		
			Factor
		
	
	
		
			Executable File
		
	
! Copyright (C) 2008 Slava Pestov.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel threads boxes accessors ;
 | 
						|
IN: concurrency.exchangers
 | 
						|
 | 
						|
! Motivated by
 | 
						|
! http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Exchanger.html
 | 
						|
 | 
						|
TUPLE: exchanger thread object ;
 | 
						|
 | 
						|
: <exchanger> ( -- exchanger )
 | 
						|
    <box> <box> exchanger boa ;
 | 
						|
 | 
						|
: exchange ( obj exchanger -- newobj )
 | 
						|
    dup thread>> occupied>> [
 | 
						|
        dup object>> box>
 | 
						|
        >r thread>> box> resume-with r>
 | 
						|
    ] [
 | 
						|
        [ object>> >box ] keep
 | 
						|
        [ thread>> >box ] curry "exchange" suspend
 | 
						|
    ] if ;
 |