RosettaCodeData/Task/Synchronous-concurrency/Kotlin/synchronous-concurrency-1.kts
2024-10-16 18:07:41 -07:00

30 lines
696 B
Kotlin

import java.util.concurrent.SynchronousQueue
import kotlin.concurrent.thread
import java.io.File
const val EOT = "\u0004" // end of transmission
fun main(args: Array<String>) {
val queue = SynchronousQueue<String>()
val work = thread {
var count = 0
while (true) {
val line = queue.take()
if (line == EOT) {
queue.put(count.toString())
break
}
println(line)
count++
}
}
File("input.txt").forEachLine { line -> queue.put(line) }
queue.put(EOT)
work.join()
val count = queue.take().toInt()
println("\nNumber of lines printed = $count")
}