code_projects_kotlin/STEP1_Basics/8_Threads/main.kt

49 lines
1.2 KiB
Kotlin

package org.example
var sum: Int = 0
var lock: Int = -1
var workers: Array<Int> = arrayOf()
class WorkerThread(private val threadI: Int): Thread() {
public override fun run() {
for (i in 1..3) {
// Wait until unlocked
while (lock != threadI) {
Thread.sleep(100)
}
sum += 1
println("T$threadI | $sum")
Thread.sleep(500)
// Pass execution to the next thread
// Check if we not last
if (workers.size > 1) {
// Check if thread last in array
if (workers.indexOf(threadI) == (workers.size - 1)) {
lock = 0
}
else {
lock = workers.indexOf(threadI) + 1
}
}
}
}
}
fun main() {
val threadNums = 3;
var threadArray: Array<Thread> = arrayOf()
var firstThread: Boolean = true
for (i in 0..<threadNums) {
if (firstThread) {
lock = i
firstThread = false
}
threadArray += WorkerThread(i)
workers += i
}
for (i in threadArray) {
i.start()
}
}