From ed5a7271655be2d846d8d1ef37b7f51dd24c8ad9 Mon Sep 17 00:00:00 2001 From: glenda Date: Tue, 13 Sep 2022 13:54:07 +0000 Subject: Add demo showing message passing --- demos/doubleup.apl | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 demos/doubleup.apl (limited to 'demos/doubleup.apl') diff --git a/demos/doubleup.apl b/demos/doubleup.apl new file mode 100644 index 0000000..44d3cd9 --- /dev/null +++ b/demos/doubleup.apl @@ -0,0 +1,38 @@ +⍝ Define the "double up" function +f←{ + (who message)←{1 ⍵} RECV ⍬ ⍝ Recieve a message with no timeout + (2×message) SEND who ⍝ Reply with 2×message + ∇⍵ ⍝ Recurse + } + +⍝ Spawn it as a seperate thread +id←f&'double up'⊢⍬ + +⍝ Check it's status (id, name, mails in mailbox) +id ⎕tasks 0 1 4 + +⍝ Check our own status +⎕self ⎕tasks 0 1 4 + +⍝ Send a few messages to our own mailbox +'hello' SEND ⎕self +(⍳2 2) SEND ⎕self + +⍝ Send a message to the double up thread +(⍳5) SEND id + +⍝ Check our own status again +⎕self ⎕tasks 0 1 4 + +⍝ We now have a few messages, but we want a specific one.. +⍝ That is, the one where the sender = id +{id=⊃⍵:1 ⍵ ⋄ 0} RECV 0 + +⍝ We might as well get the other messages as well +flush←{ + 12::⍵ ⍝ Stop when we get a timeout error + m←{1 ⍵} RECV 0 + ∇⍵,⊂m + } + +flush ⍬ \ No newline at end of file -- cgit v1.2.3