diff options
author | wisberg <wisberg> | 2002-12-16 23:28:22 +0000 |
---|---|---|
committer | wisberg <wisberg> | 2002-12-16 23:28:22 +0000 |
commit | 6338556123543cf33fc42ee6f3af4e5768805adc (patch) | |
tree | 6e9b0e661fba1a0d1932b5c085bded83ea15130e /docs/dist/doc/examples/spacewar/GameSynchronization.java | |
parent | ab18cfd453a41c8b728e8485809ef87c218ecf72 (diff) | |
download | aspectj-6338556123543cf33fc42ee6f3af4e5768805adc.tar.gz aspectj-6338556123543cf33fc42ee6f3af4e5768805adc.zip |
moved examples under doc per Erik
Diffstat (limited to 'docs/dist/doc/examples/spacewar/GameSynchronization.java')
-rw-r--r-- | docs/dist/doc/examples/spacewar/GameSynchronization.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/docs/dist/doc/examples/spacewar/GameSynchronization.java b/docs/dist/doc/examples/spacewar/GameSynchronization.java new file mode 100644 index 000000000..dcf42e904 --- /dev/null +++ b/docs/dist/doc/examples/spacewar/GameSynchronization.java @@ -0,0 +1,54 @@ +/* + +Copyright (c) Xerox Corporation 1998-2002. All rights reserved. + +Use and copying of this software and preparation of derivative works based +upon this software are permitted. Any distribution of this software or +derivative works must comply with all applicable United States export control +laws. + +This software is made available AS IS, and Xerox Corporation makes no warranty +about the software, its performance or its conformity to any specification. + +|<--- this code is formatted to fit into 80 columns --->| +|<--- this code is formatted to fit into 80 columns --->| +|<--- this code is formatted to fit into 80 columns --->| + + +RegistrySynchronization.java +Part of the Spacewar system. + +*/ + +package spacewar; + +import coordination.Coordinator; + +/** + * This aspect ensures synchronized access to methods of the Game in the + * presence of several threads. + * + * It uses the Coordinator class, from the AspectJ coordination library. + * (This case is right on the borderline of being too simple to use the + * coordination library, but we use it anyways to keep the similarity + * with the RegistrySynchronizer.) + * + * It uses a per-Game coordination scheme, so there is one instance of + * this class for each instance of the Game class. When this class is + * constructed, it registers appropriate mutexes and selfexes using + * the behavior inherited from Coordinator. + * + * The coordination constraints for the Game are simple. We just need to + * make sure that newShip and handleCollisions are mutually exclusive. That + * ensures that they we can't destroy a ship that has just been replaced. + */ +aspect GameSynchronization extends Coordinator perthis(this(Game)) { + + protected pointcut synchronizationPoint(): + call(void Game.handleCollisions(..)) || call(Ship Game.newShip(..)); + + public GameSynchronization() { + addMutex(new String[] {"handleCollisions", "newShip"}); + } + +} |