Jump to content

Metered concurrency: Difference between revisions

Added EchoLisp
(Added zkl)
(Added EchoLisp)
Line 404:
work(i, 2000, semaphore, timer, println)
}</lang>
 
=={{header|EchoLisp}}==
<lang scheme>
(require 'tasks) ;; tasks library
 
(define (task id)
(wait S) ;; acquire, p-op
(printf "task %d acquires semaphore @ %a" id (date->time-string (current-date)))
(sleep 2000)
(signal S) ;; release, v-op
id)
(define S (make-semaphore 4)) ;; semaphore with init count 4
 
;; run 10 // tasks
(for ([i 10]) (task-run (make-task task i ) (random 500)))
</lang>
{{out}}
<pre>
task 1 acquires semaphore @ 19:23:03
task 6 acquires semaphore @ 19:23:03
task 4 acquires semaphore @ 19:23:03
task 7 acquires semaphore @ 19:23:03
task 8 acquires semaphore @ 19:23:05
task 9 acquires semaphore @ 19:23:05
task 0 acquires semaphore @ 19:23:05
task 3 acquires semaphore @ 19:23:05
task 2 acquires semaphore @ 19:23:07
task 1 acquires semaphore @ 19:23:07
task 6 acquires semaphore @ 19:23:07
task 5 acquires semaphore @ 19:23:08
task 7 acquires semaphore @ 19:23:09
task 4 acquires semaphore @ 19:23:09
task 9 acquires semaphore @ 19:23:10
task 8 acquires semaphore @ 19:23:10
task 0 acquires semaphore @ 19:23:11
;; etc.
</pre>
 
=={{header|Erlang}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.