Record shared read permits against a fixed pool and report the access mode.

Permit Pool Coordination Report

PermitPoolCoordinationReport.kt
import java.util.concurrent.atomic.AtomicInteger

fun main() {
    val readers = 
    val slots = 3
    val permits = AtomicInteger(slots)
    var held = 0

    for (i in 0 until readers) {
        if (permits.getAndDecrement() > 0) {
            held++
        } else {
            permits.getAndIncrement()
        }
    }

    val free = permits.get()

    val status = if (held == 0) {
        "writable"
    } else if (held == slots) {
        "shared"
    } else {
        "single"
    }

    println("readers=$readers held=$held free=$free $status")
}
import java.util.concurrent.atomic.AtomicInteger

fun main() {
    val readers = 
    val slots = 3
    val permits = AtomicInteger(slots)
    var held = 0

    for (i in 0 until readers) {
        if (permits.getAndDecrement() > 0) {
            held++
        } else {
            permits.getAndIncrement()
        }
    }

    val free = permits.get()

    val status = if (held == 0) {
        "writable"
    } else if (held == slots) {
        "shared"
    } else {
        "single"
    }

    println("readers=$readers held=$held free=$free $status")
}
import java.util.concurrent.atomic.AtomicInteger

fun main() {
    val readers = 
    val slots = 3
    val permits = AtomicInteger(slots)
    var held = 0

    for (i in 0 until readers) {
        if (permits.getAndDecrement() > 0) {
            held++
        } else {
            permits.getAndIncrement()
        }
    }

    val free = permits.get()

    val status = if (held == 0) {
        "writable"
    } else if (held == slots) {
        "shared"
    } else {
        "single"
    }

    println("readers=$readers held=$held free=$free $status")
}
bounded permit pool A coordination report can record how a shared pool is occupied. An `java.util.concurrent.atomic.AtomicInteger` started at the slot count models a pool of shared read permits, and a `getAndDecrement` that returns a positive prior value takes one permit without blocking; a draw past the last permit is returned with `getAndIncrement`. With no permits taken the pool is writable for an exclusive writer, with one permit taken access is single, and with every permit taken access is fully shared. The status line summarizes the mode, and `get` reports the free permits.