Synchronous concurrency: Difference between revisions
Content added Content deleted
(Added Kotlin) |
No edit summary |
||
Line 1,102: | Line 1,102: | ||
task_yield() |
task_yield() |
||
end while</lang> |
end while</lang> |
||
=={{header|Forth}}== |
|||
Tested in GForth 0.7.3. First, 'co.fs' - the coroutines library, then the output of the application on himself, |
|||
result of the command-line: 'cat synco.fs | gforth synco.fs'. |
|||
<lang forth>\ |
|||
\ co.fs Coroutines by continuations. |
|||
\ |
|||
\ * Circular Queue. Capacity is power of 2. |
|||
\ |
|||
VARIABLE HEAD VARIABLE TAIL |
|||
128 CELLS CONSTANT CQ# |
|||
\ * align by queue capacity |
|||
HERE DUP |
|||
CQ# 1- INVERT AND CQ# + |
|||
SWAP - ALLOT |
|||
\ |
|||
HERE CQ# ALLOT CONSTANT START |
|||
\ |
|||
: ADJUST ( -- ) [ CQ# 1- ]L AND START + ; |
|||
: PUT ( n-- ) TAIL @ TUCK ! CELL+ ADJUST TAIL ! ; |
|||
: TAKE ( --n ) HEAD @ DUP @ SWAP CELL+ ADJUST HEAD ! ; |
|||
: 0CQ ( -- ) START DUP HEAD ! TAIL ! ; 0CQ |
|||
: NOEMPTY? ( --f ) HEAD @ TAIL @ <> ; |
|||
: ;CO ( -- ) TAKE >R ; |
|||
\ |
|||
\ * COROUTINES LEXEME |
|||
\ |
|||
: CO: ( -- ) R> PUT ; \ Register continuation as coroutine. Exit. |
|||
: CO ( -- ) R> PUT TAKE >R ; \ Co-route. |
|||
: GO ( -- ) BEGIN NOEMPTY? WHILE ;CO REPEAT ; \ :-) |
|||
\ |
|||
\ * CHANNELS LEXEME |
|||
\ |
|||
: CHAN? ( a--f ) 2@ XOR ; |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
\ synco.fs Synchronous concurrency for RosettaCode |
|||
include co.fs |
|||
: STRING@ DUP CELL + SWAP @ ; |
|||
2VARIABLE CHAN |
|||
\ |
|||
\ * READER LEXEME |
|||
\ |
|||
4096 CONSTANT L# |
|||
CREATE Line 0 , L# ALLOT |
|||
: READER |
|||
CO: |
|||
BEGIN |
|||
Line cell+ L# STDIN read-line THROW |
|||
WHILE |
|||
Line ! |
|||
0 Line CHAN 2! |
|||
CO |
|||
REPEAT DROP |
|||
Line DUP CHAN 2! |
|||
CO |
|||
CR S" -------" TYPE |
|||
CR S" LINES: " TYPE CHAN @ ? |
|||
; |
|||
\ |
|||
\ * WRITER LEXEME |
|||
\ |
|||
VARIABLE X |
|||
: WRITER |
|||
CO: 0 X ! |
|||
BEGIN |
|||
CHAN CHAN? |
|||
WHILE |
|||
CHAN @ STRING@ TYPE CR |
|||
1 X +! |
|||
CO |
|||
REPEAT |
|||
0 X CHAN 2! |
|||
CO |
|||
; |
|||
\ |
|||
\ * RUNNER |
|||
\ |
|||
READER WRITER GO CR BYE |
|||
------- |
|||
LINES: 46 |
|||
</pre> |
|||
=={{header|F_Sharp|F#}}== |
=={{header|F_Sharp|F#}}== |