Merge remote branch 'origin/master'

This commit is contained in:
Andrey Breslav
2011-12-20 14:21:59 +04:00
5 changed files with 53 additions and 22 deletions
@@ -233,6 +233,9 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
condition.condJump(elseLabel, true, v); // == 0, i.e. false
Label end = continueLabel == null ? new Label() : continueLabel;
if(continueLabel != null)
asmType = Type.VOID_TYPE;
gen(thenExpression, asmType);
@@ -0,0 +1,14 @@
import java.lang.Runtime
fun box() : String {
val processors = Runtime.getRuntime().sure().availableProcessors()
var threadNum = 1
while(threadNum <= 1024) {
System.out?.println(threadNum)
if(threadNum < 2 * processors)
threadNum += 1
else
threadNum *= 2
}
return "OK"
}
@@ -244,6 +244,12 @@ public class ControlStructuresTest extends CodegenTestCase {
public void testSynchronized() throws Exception {
createEnvironmentWithFullJdk();
blackBoxFile("controlStructures/sync.jet");
// System.out.println(generateToText());
}
public void testIfInWhile() throws Exception {
createEnvironmentWithFullJdk();
blackBoxFile("controlStructures/ifInWhile.jet");
// System.out.println(generateToText());
}
}
+20 -22
View File
@@ -1,5 +1,7 @@
namespace lockperformance
import std.io.*
import std.util.*
import std.concurrent.*
import java.util.concurrent.atomic.AtomicInteger;
@@ -13,41 +15,37 @@ fun <T> Int.latch(op: fun CountDownLatch.() : T) : T {
return res
}
fun Int.times(action: fun():Unit) {
for(i in 0..this-1)
action()
}
fun main(args: Array<String>) {
val processors = Runtime.getRuntime().sure().availableProcessors()
var threadNum = 1
while(threadNum <= 1024) {
val counter = AtomicInteger()
val start = System.currentTimeMillis()
threadNum.latch{
val lock = ReentrantLock()
threadNum.times {
thread {
while(true) {
lock.lock()
try {
if (counter.get() == 100000000) {
countDown();
break;
} else {
counter.incrementAndGet();
val duration = millisTime {
threadNum.latch{
val lock = ReentrantLock()
for(i in 0..threadNum-1) {
thread {
while(true) {
lock.lock()
try {
if (counter.get() == 100000000) {
countDown();
break;
} else {
counter.incrementAndGet();
}
}
finally {
lock.unlock()
}
}
finally {
lock.unlock()
}
}
}
}
}
System.out?.println(threadNum.toString() + " " + (System.currentTimeMillis() - start));
println(threadNum.toString() + " " + duration)
if(threadNum < 2 * processors)
threadNum = threadNum + 1
+10
View File
@@ -0,0 +1,10 @@
namespace std.util
/**
Executes current block and returns elapsed time in milliseconds
*/
fun millisTime(block: fun() : Unit) : Long {
val start = System.currentTimeMillis()
block()
return System.currentTimeMillis() - start
}