46c8cfbeff
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1799 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
58 lines
1.5 KiB
Plaintext
58 lines
1.5 KiB
Plaintext
=================================================================
|
|
Logtalk - Object oriented extension to Prolog
|
|
Release 2.29.4
|
|
|
|
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
|