| // TARGET_BACKEND: JVM | |
| // WITH_STDLIB | |
| // FULL_JDK | |
| import java.util.concurrent.* | |
| import java.util.concurrent.atomic.* | |
| fun thread(block: ()->Unit ) { | |
| val thread = object: Thread() { | |
| override fun run() { | |
| block() | |
| } | |
| } | |
| thread.start() | |
| } | |
| fun box() : String { | |
| val mtref = AtomicInteger() | |
| val cdl = CountDownLatch(11) | |
| for(i in 0..10) { | |
| thread { | |
| var current = 0 | |
| do { | |
| current = synchronized(mtref) { | |
| val v = mtref.get() + 1 | |
| if(v < 100) | |
| mtref.set(v+1) | |
| v | |
| } | |
| } | |
| while(current < 100) | |
| cdl.countDown() | |
| } | |
| } | |
| cdl.await() | |
| return if(mtref.get() == 100) "OK" else mtref.get().toString() | |
| } |