Jump to content

Banker's algorithm: Difference between revisions

m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(One intermediate revision by the same user not shown)
Line 1,801:
The process is in safe state.
The available vector is: 8 5 9 7
</pre>
 
=={{header|Scala}}==
{{trans|Python}}
<syntaxhighlight lang="Scala">
import scala.io.StdIn.readLine
 
object BankersAlgorithm {
def main(args: Array[String]): Unit = {
println("Number of resources: ")
val resources = readLine().toInt
 
println("Number of processes: ")
val processes = readLine().toInt
 
println("Maximum resources: ")
val maxResources = readLine().split(" ").map(_.toInt)
 
println("\n-- resources allocated for each process --")
val currentlyAllocated = Array.ofDim[Int](processes, resources)
for (i <- 0 until processes) {
println(s"process ${i + 1}: ")
currentlyAllocated(i) = readLine().split(" ").map(_.toInt)
}
 
println("\n--- maximum resources for each process ---")
val maxNeed = Array.ofDim[Int](processes, resources)
for (i <- 0 until processes) {
println(s"process ${i + 1}: ")
maxNeed(i) = readLine().split(" ").map(_.toInt)
}
 
val allocated = Array.fill(resources)(0)
for (i <- 0 until processes) {
for (j <- 0 until resources) {
allocated(j) += currentlyAllocated(i)(j)
}
}
println(s"\nTotal resources allocated: ${allocated.mkString(", ")}")
 
val available = maxResources.zip(allocated).map { case (max, alloc) => max - alloc }
println(s"Total resources available: ${available.mkString(", ")}\n")
 
var running = Array.fill(processes)(true)
var count = processes
 
while (count != 0) {
var safe = false
for (i <- 0 until processes if running(i)) {
var executing = true
for (j <- 0 until resources) {
if (maxNeed(i)(j) - currentlyAllocated(i)(j) > available(j)) {
executing = false
}
}
if (executing) {
println(s"process ${i + 1} is running")
running(i) = false
count -= 1
safe = true
for (j <- 0 until resources) {
available(j) += currentlyAllocated(i)(j)
}
}
}
 
if (!safe) {
println("The processes are in an unsafe state.")
return
}
 
println(s"The processes are in a safe state.\nAvailable resources: ${available.mkString(", ")}\n")
}
}
}
</syntaxhighlight>
 
'''input'''
 
<pre>
4
3
6 5 7 6
1 2 2 1
1 0 3 3
1 2 1 0
3 3 2 2
1 2 3 4
1 3 5 0
</pre>
{{out}}
<pre>
Number of resources: 4
Number of processes: 3
Maximum resources: 6 5 7 6
 
-- resources allocated for each process --
process 1: 1 2 2 1
process 2: 1 0 3 3
process 3: 1 2 1 0
 
--- maximum resources for each process ---
process 1: 3 3 2 2
process 2: 1 2 3 4
process 3: 1 3 5 0
 
Total resources allocated: 3, 4, 6, 4
Total resources available: 3, 1, 1, 2
 
process 1 is running
process 2 is running
process 3 is running
The processes are in a safe state.
Available resources: 6, 5, 7, 6
 
 
</pre>
 
337

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.