blob: d5d9efa491e5236daffa72d721b4ea7efd55f429 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
// Notice how counter can only be modified as read as [c]
counter : %shared 0
inc_dec : ([amount]
header : %const `format "WHITE#Counter:# "
body : ^ counter {[c]
c +: amount
? {
amount = 1 { "#GREEN#%#" `format c }
amount = -1 { "#RED#%#" `format c }
{ "INVALID" }
}
}
`log ,(header; body; "\n")
)
inc : inc_dec `bind 1
dec : inc_dec `bind -1
actions : %const 1_000
batch : %const 100
runner : ([fn]
total : actions
@ total {
`log "#BOLD#WHITE#Batch: #CYAN#% #MAGENTA#%#\n" `format (fn; total)
v : Vector[`async_type fn] $ ()
@ 1 .. batch { v `push `async fn }
@ v {[x] `await x }
total -: batch
}
)
i : runner `async inc
d : runner `async dec
`use "time" [Seconds]
`use "sys" [sleep]
sleep `sync Seconds $ 1
`await (d; i)
`log ^ counter {[c]
? !c {
`format "#BOLD#GREEN#VALID#\n"
} {
`format "#BOLD#RED#INVALID#\n"
}
}
|