123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
-
- 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"});
- }
-
- }
|