Admit readers against a fixed permit pool and turn the remaining permits into an admit, hold, or shed remediation action.

remaining capacity The permit pool is modeled with a scalar counter, so the remaining permits stay deterministic and free of atomic identity while driving the remediation action.

Permit Pool Remediation Report

readers
PermitPoolRemediationReport.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val readers = 1
    val capacity = 3
    var admitted = readers
    if (admitted > capacity) {
      admitted = capacity
    }
    val remaining = capacity - admitted

    var action = "admit"
    if (remaining == 1) {
      action = "hold"
    }
    if (remaining == 0) {
      action = "shed"
    }

    println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val readers = 2
    val capacity = 3
    var admitted = readers
    if (admitted > capacity) {
      admitted = capacity
    }
    val remaining = capacity - admitted

    var action = "admit"
    if (remaining == 1) {
      action = "hold"
    }
    if (remaining == 0) {
      action = "shed"
    }

    println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val readers = 4
    val capacity = 3
    var admitted = readers
    if (admitted > capacity) {
      admitted = capacity
    }
    val remaining = capacity - admitted

    var action = "admit"
    if (remaining == 1) {
      action = "hold"
    }
    if (remaining == 0) {
      action = "shed"
    }

    println("readers=" + readers + " admitted=" + admitted + " remaining=" + remaining + " " + action)
  }
}
  1. readers ← 1, capacity ← 3, admitted ← 1, remaining ← 2, action ← admit

    1object Main {2  def main(args: Array[String]): Unit = {3    val readers→ 1 = 1 //@readers=2, 44    val capacity→ 3 = 35    var admitted→ 1 = readers→ 16    if (admitted > capacity) {7      admitted = capacity8    }9    val remaining→ 2 = capacity3 - admitted11011    var action→ admit = "admit"12    if (remaining == 1) {13      action = "hold"14    }15    if (remaining == 0) {16      action = "shed"17    }1819    println("readers=" + readers1 + " admitted=" + admitted1 + " remaining=" + remaining2 + " " + actionadmit)20  }21}
    outputreaders=1 admitted=1 remaining=2 admit
  1. readers ← 2, capacity ← 3, admitted ← 2, remaining ← 1, action ← admit

    1object Main {2  def main(args: Array[String]): Unit = {3    val readers→ 2 = 24    val capacity→ 3 = 35    var admitted→ 2 = readers→ 26    if (admitted > capacity) {7      admitted = capacity8    }9    val remaining→ 1 = capacity3 - admitted21011    var action→ admit = "admit"12    if (remaining == 1) {13      action = "hold"
  2. action ← hold

    11var action = "admit"12if (remaining1 == 1) {13  action→ hold = "hold"14}15if (remaining == 0) {
  3. println("readers=" + readers + " admitted=" + admitted + " remaining="…

    19    println("readers=" + readers2 + " admitted=" + admitted2 + " remaining=" + remaining1 + " " + actionhold)20  }21}
    outputreaders=2 admitted=2 remaining=1 hold
  1. readers ← 4, capacity ← 3, admitted ← 4

    1object Main {2  def main(args: Array[String]): Unit = {3    val readers→ 4 = 44    val capacity→ 3 = 35    var admitted→ 4 = readers→ 46    if (admitted > capacity) {7      admitted = capacity
  2. admitted ← 3

    5var admitted = readers6if (admitted4 > capacity3) {7  admitted→ 3 = capacity38}9val remaining = capacity - admitted
  3. remaining ← 0, action ← admit

    8}9val remaining→ 0 = capacity3 - admitted31011var action→ admit = "admit"12if (remaining == 1) {13  action = "hold"
  4. action ← shed

    14}15if (remaining0 == 0) {16  action→ shed = "shed"17}
  5. println("readers=" + readers + " admitted=" + admitted + " remaining="…

    19    println("readers=" + readers4 + " admitted=" + admitted3 + " remaining=" + remaining0 + " " + actionshed)20  }21}
    outputreaders=4 admitted=3 remaining=0 shed