Listing 1
%aspect Synchronization
Listing 2:
using AOP;
public class Synchronization
{
%modules
public class Semaphore {
private bool Open = true;
public void P()
{
lock (this) {
Open = false;
while (!Open) {
System.Threading.Monitor.Wait(this);
}
}
} // P
public void V()
{
lock (Open) {
Open = true;
System.Threading.Monitor.Pulse(this);
}
} // V
} // Semaphore
%data
public static Semaphore s = new Semaphore();
%rules
%before ResourceUpdate
%action
public static void lockAction() { s.P(); }
%after ResourceUpdate
%action
public static void unlockAction() { s.
V(); }
} // Synchronization
[AspectDef
(Name = "Synchronization",
Role = "MainModule",
Value ="Param:
]
public class Synchronization
{
[AspectDef
(Name = "Synchronization",
Role = "Module"
)
]
public class Semaphore { ... }
[AspectDef (Name = "Synchronization", Role =
"Data")]
public static Semaphore s = new Semaphore();
[
AspectDef
(Name = "Synchronization",
Role = "Action",
Value = "%before resourceUpdate"
)
]
public static void lockAction() { ... }
[
AspectDef
(Name = "Synchronization",
Role = "Action",
Value = "%after resourceUpdate")
]
public static void unlockAction() { ... }
} // Synchronization