git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1973 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ================================================================
 | |
| Logtalk - Open source object-oriented logic programming language
 | |
| Release 2.30.7
 | |
| 
 | |
| Copyright (c) 1998-2007 Paulo Moura.  All Rights Reserved.
 | |
| ================================================================
 | |
| 
 | |
| 
 | |
| % start by loading the loading the example:
 | |
| 
 | |
| | ?- logtalk_load(sync(loader)).
 | |
| ...
 | |
| 
 | |
| 
 | |
| % send three asynchronous messages whose corresponding methods perform output operations:
 | |
| 
 | |
| | ?- threaded_ignore(nasty1::io(alpha)), threaded_ignore(nasty1::io(digit)), threaded_ignore(nasty1::io(alpha)).
 | |
| 
 | |
| a0ab1bc2c3ddefef45gg6hh7ii8jkjk9
 | |
| llmmnnopopqqrrsstztzyyxxwwuv
 | |
| uv
 | |
| 
 | |
| Yes
 | |
| 
 | |
| 
 | |
| % send three asynchronous messages whose corresponding methods perform database updates
 | |
| % (this may or may not work, most likely will throw an exception):
 | |
| 
 | |
| | ?- threaded_ignore(nasty1::update_db(_)), threaded_ignore(nasty1::update_db(_)), threaded_ignore(nasty1::update_db(_)).
 | |
| 
 | |
| No
 | |
| 
 | |
| 
 | |
| % the best solution is to declare predicates that need to be thread synchronized as "synchronized",
 | |
| % as exemplified in object "nasty2":
 | |
| 
 | |
| | ?- threaded_ignore(nasty2::io(alpha)), threaded_ignore(nasty2::io(digit)), threaded_ignore(nasty2::io(alpha)).
 | |
| 
 | |
| abcdefghijklmnopqrstzyxwuv
 | |
| 0123456789
 | |
| abcdefghijklmnopqrstzyxwuv
 | |
| 
 | |
| Yes
 | |
| 
 | |
| 
 | |
| | ?- threaded_call(nasty2::update_db(_)), threaded_call(nasty2::update_db(_)), threaded_call(nasty2::update_db(_)).
 | |
| 
 | |
| Yes
 | |
| 
 | |
| | ?- threaded_exit(nasty2::update_db(X)), threaded_exit(nasty2::update_db(Y)), threaded_exit(nasty2::update_db(Z)).
 | |
| 
 | |
| 
 | |
| X = 1
 | |
| Y = 2
 | |
| Z = 3 
 | |
| 
 | |
| Yes
 |