| // 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() |
| } |