Determining the status of a static race
, " " . , , , , :-) ¹ You (1), , (2) (3) . ( , ), :
- : - ? , /?
- : - ? , /?
- : ? , , ..?
- :. , , ?
, 100% - 1, 2, - ( ). , ² (№ 1 № 3); , , , . ( , , , , , .)
: RaceFreeJava
, (№ 3): , , , , . RaceFreeJava (Abadi et al., 2006). RaceFreeJava - Java, :
- (
ghost locks); guarded_by, , ;requires, , .
, , , ; , , , , . ghost; ,
class RunningTotals<ghost Object m> {
private int sum = 0 guarded_by m;
private int product = 1 guarded_by m;
public void include(int x) requires m {
sum += x;
product *= x;
}
public int getSum() requires m {
return sum;
}
public int getProduct() requires m {
return product;
}
}
RunningTotals - o o lock, ; , , m . , RunningTotals m, m ghost; . , , RaceFreeJava thread_local; , , .
, , , , , Java . RaceFreeJava , ; , , . Abadi et al. . , (, , ) , . - , - Abadi et al. (rccjava) , (Houdini/rcc) . ( I-IV), . , ; Java-, .
, , ( ), , , , RaceFreeJava, , . , .
Boyapati et al. (2002). , , ; , , ; . , accesses locks. Boyapati et al. , . , , . , ( , , ), . , .
, . , , , , , , , ( ), . RacerX (Engler and Ashcraft, 2003) , , Lockset, Eraser (Savage et al., 1997). , , . RacerX , - . Engler Ashcraft RacerX, , ( 5).
, RacerX , , - : , . ; faux-C:
acquire(superman_lock);
*superman_bank_account += 100;
release(superman_lock);
acquire(clark_kent_lock);
*clark_kent_bank_account -= 100;
release(clark_kent_lock);
, superman_lock clark_kent_lock , , , , superman_bank_account , clark_kent_bank_account. !
Chord (Naik et al., 2006) - , - ; , , , . (, - ), .
. : (1) , (2) (3) ? , ; RaceFreeJava, , , , , . , , . , , , , , , , , , . , , ; , Coverity () , , . , , , .
¹ , , . , , , ! , , ( 2011-2012 ). , - , , , , (, ) ; - , , !
² , Haskell:-) C , Java , , downcasting (* *). .
³ ACM; PDF- , PostScript.
, . . " : Java" . ACM- (TOPLAS) 28 (2), 2006 ., . 207-255.
, . " : " . 17- ACM SIGPLAN - , , (OOPSLA), 37, 2002 ., . 211-230.
. "RacerX: , " . 19- ACM (SOSP), 37, 2003, . 237-252.
, . " Java". ACM SIGPLAN 2006 (PLDI), 41, 2006, . 308-319. ACM PostScript.
, , , . "Eraser: " . ACM Transactions on Computer Systems 15 (4), 1997, pp. 391-411.