[Soot-list] questions on synchronization
Arnab De
arnabde03 at gmail.com
Sun Apr 23 12:33:26 EDT 2006
Hi all,
I'm attaching here a small code and its jimple version:
Java code:
class Friendly extends Thread{
private Friendly partner;
private String name;
Lock l;
static Lock l1 = new Lock();
static Lock l2 = new Lock();
public Friendly(String name, Lock l){
this.name = name;
this.l = l;
}
public void hug(){
synchronized(l){
System.out.println("here");
yield();
partner.hugBack();
}
}
public void hugBack(){
synchronized(l){
System.out.println("there");
}
}
public void becomeFriend(Friendly partner){
this.partner = partner;
}
public void run(){
hug();
}
public static void main(String[] args){
final Friendly jareth = new Friendly("jareth", l1);
final Friendly cory = new Friendly("cory", l2);
jareth.becomeFriend(cory);
cory.becomeFriend(jareth);
jareth.start();
cory.start();
}
}
class Lock{
}
Jimple version (of class Friendly):
class Friendly extends java.lang.Thread
{
private Friendly partner;
private java.lang.String name;
Lock l;
static Lock l1;
static Lock l2;
public void <init>(java.lang.String, Lock)
{
Friendly this;
java.lang.String name;
Lock l;
this := @this: Friendly;
name := @parameter0: java.lang.String;
l := @parameter1: Lock;
specialinvoke this.<java.lang.Thread: void <init>()>();
this.<Friendly: java.lang.String name> = name;
this.<Friendly: Lock l> = l;
return;
}
public void run()
{
Friendly this;
this := @this: Friendly;
virtualinvoke this.<Friendly: void hug()>();
return;
}
public void hugBack()
{
Friendly this;
Lock l1, $r0;
java.lang.Throwable l2, $r2;
java.io.PrintStream $r1;
this := @this: Friendly;
$r0 = this.<Friendly: Lock l>;
l1 = $r0;
entermonitor $r0;
label0:
$r1 = <java.lang.System: java.io.PrintStream out>;
virtualinvoke $r1.<java.io.PrintStream: void println(
java.lang.String)>("there");
exitmonitor l1;
label1:
goto label5;
label2:
$r2 := @caughtexception;
label3:
l2 = $r2;
exitmonitor l1;
label4:
throw l2;
label5:
return;
catch java.lang.Throwable from label0 to label1 with label2;
catch java.lang.Throwable from label3 to label4 with label2;
}
public void becomeFriend(Friendly)
{
Friendly this, partner;
this := @this: Friendly;
partner := @parameter0: Friendly;
this.<Friendly: Friendly partner> = partner;
return;
}
public void hug()
{
Friendly this, $r2;
Lock l1, $r0;
java.lang.Throwable l2, $r3;
java.io.PrintStream $r1;
this := @this: Friendly;
$r0 = this.<Friendly: Lock l>;
l1 = $r0;
entermonitor $r0;
label0:
$r1 = <java.lang.System: java.io.PrintStream out>;
virtualinvoke $r1.<java.io.PrintStream: void println(
java.lang.String)>("here");
staticinvoke <Friendly: void yield()>();
$r2 = this.<Friendly: Friendly partner>;
virtualinvoke $r2.<Friendly: void hugBack()>();
exitmonitor l1;
label1:
goto label5;
label2:
$r3 := @caughtexception;
label3:
l2 = $r3;
exitmonitor l1;
label4:
throw l2;
label5:
return;
catch java.lang.Throwable from label0 to label1 with label2;
catch java.lang.Throwable from label3 to label4 with label2;
}
public static void main(java.lang.String[])
{
java.lang.String[] args;
Friendly $r0, jareth, cory;
Lock $r1;
args := @parameter0: java.lang.String[];
$r0 = new Friendly;
$r1 = <Friendly: Lock l1>;
specialinvoke $r0.<Friendly: void
<init>(java.lang.String,Lock)>("jareth",
$r1);
jareth = $r0;
$r0 = new Friendly;
$r1 = <Friendly: Lock l2>;
specialinvoke $r0.<Friendly: void
<init>(java.lang.String,Lock)>("cory",
$r1);
cory = $r0;
virtualinvoke jareth.<Friendly: void becomeFriend(Friendly)>(cory);
virtualinvoke cory.<Friendly: void becomeFriend(Friendly)>(jareth);
virtualinvoke jareth.<Friendly: void start()>();
virtualinvoke cory.<Friendly: void start()>();
return;
}
static void <clinit>()
{
Lock $r0;
$r0 = new Lock;
specialinvoke $r0.<Lock: void <init>()>();
<Friendly: Lock l1> = $r0;
$r0 = new Lock;
specialinvoke $r0.<Lock: void <init>()>();
<Friendly: Lock l2> = $r0;
return;
}
}
My question is where there is a exception throwing in the synchronizd
methods?
--
Arnab De
ME (CSE)
Computer Science & Automation Dept.
IISc, Bangalore.
------------------------------------------------------------------------
Gravitaton can't be held responsible for people falling in love.
--Einstein
------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20060423/ec2fa492/attachment.htm
More information about the Soot-list
mailing list