Anonymous user
Metered concurrency: Difference between revisions
m
→Icon and {{header|Unicon}}
No edit summary |
|||
Line 761:
Icon doesn't support concurrency. A Unicon solution is:
<lang unicon>procedure main(A)
n := integer(A[1] | 3) # Max. number of active tasks
k := integer(A[3] | 5) # Number of tasks
sem := [: |mutex([])\n :]
every put(threads := [], (i := 1 to
write("unit ",i," ready")
until flag := trylock(!sem)
Line 772 ⟶ 773:
write("unit ",i," done")
unlock(flag)
}))
end</lang>
Line 780 ⟶ 781:
<pre>
->mc
unit 2 ready
unit 2 running
unit 1 ready▼
unit 1 running▼
unit 3 ready
unit 3 running
▲unit 1 ready
unit 4 ready
unit
unit 9 ready▼
unit 7 ready▼
unit 8 ready▼
unit 2 done
▲unit 1 running
unit 2 ready
unit 3 done▼
unit 5 running
unit 3 ready▼
unit 6 done▼
unit 6 ready▼
unit 2 running▼
unit 1 done
unit
unit 1 ready
unit
unit 4 running
unit 5 ready
unit 2 done
unit
unit 3 running
▲unit 3 done
->
</pre>
|