Metered concurrency: Difference between revisions

J
m (→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible)
(J)
Line 936:
->
</pre>
 
=={{header|J}}==
 
This implementation, while sufficient for this task's requirements, is for demonstration purposes only, and is not meant for serious work.
 
<lang J>scheduledumb=: {{
id=:'dumb',":x:6!:9''
wd 'pc ',id
(t)=: u {{u 0{::n[y[erase 1{::n}} (y;t=. id,'_timer')
wd 'ptimer ',":?100
}}
 
sleep=: 6!:3 NB. seconds
timestamp=: 6!:1 NB. seconds
 
acquire=: {{
imprison y
while. 1<count y do.
release y
sleep 0.1
imprison y
end.
}}
 
release=: {{ counter=: (<:y{counter) y} counter }}
imprison=: {{ counter=: (>:y{counter) y} counter }}
count=: {{ y { counter }}
 
counter=: 0 0
 
demo=: {{
acquire 0
echo 'unit ',y,&":' acquired semaphore, t=',":timestamp''
sleep 2
release 0
}}</lang>
 
Task example:
 
<lang J> demo scheduledumb"0 i.5
unit 1 acquired semaphore, t=54683.6
unit 0 acquired semaphore, t=54685.6
unit 4 acquired semaphore, t=54687.7
unit 2 acquired semaphore, t=54689.7
unit 3 acquired semaphore, t=54691.7</lang>
 
=={{header|Java}}==
6,962

edits