Listing 1

%aspect Synchronization

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

Listing 2:

using AOP;


[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