Skip to content

Instantly share code, notes, and snippets.

@isaksky
Created April 25, 2018 23:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isaksky/650784bd4aa54990aab9556f14457377 to your computer and use it in GitHub Desktop.
Save isaksky/650784bd4aa54990aab9556f14457377 to your computer and use it in GitHub Desktop.
Gjallarhorn read consistency
..................................X...X....X.X.X.X....XX.XXX...X.....XX....X..........XX.....X..X..XX..X.......X....X...XXX.X..X..XX....X.X..XX.X..X.X....X....X.X.XX.X..........XX..X....X.XX.X.XX..XXX.XXXXXX............X.....X..XX..XXX.....X.X.X.X....X..X.XX.XX.X..XX....X.......X..X.X...XX.XX..X..X..X..XX..X......X..XX.XX.XX..X.....X...XX..X.....XX......X.......X....X.................X.....................X...............X............X.X.......XX..XX......X.X.X...XXXX.X.XXXXXX.X.XX..X...X........X.....XX...X.XXXXXX.....XXXX.......X.X.X...XX..X.X....XXX...X....X..X.......X.X.........X.XX....X.........XX.XX.XX.X..X...X.X.X...XX....XX...........X........................X..X.X.X...XX....................X........XX.......X........X....X...............X............X..X.X.XXX...XXXX.....XX...X...X.....X......XX.X.X...X....X..X.X..X..X..XXX.X.XXXXX........XX....XX.X.XXXXX..X.X........X...........X..X.X.X...X......XX...X......X..X.X..X.X..X.....XX...X...X.....XX..X......X..X....X.XX.X..X.X.X.X.X.X..X....X.X....XX.X.....XXXX.X.X.XX.........XXX.X...XX..X..X..XX...X.XX...................X...XX.....X.................XX...XXX.X..X.......X.........X.XX..X..XX...X.X..X.X..........X..X.XX....X...X.X.XX...........X...........X.X...X..XX......X......................X.X....X...X.X.....X.XX.XXXX..XXX....XX.X...X..............X.........X...X...X.........XX.............X..XX......XXXX.XXX.X................X..X.............X...X..X....X.....................XX.X.X..........X..X....................X.........X..X.X..X.........X..........XX...X.................XXX.....XXX.X..XX.XXXX.X...X...X..X.XX.X..XXXXXXXX......X...X....XXX.XXXXXXXXXX..XX.XX.X............X..........X.................X.............X..................XXX..X.X.X..X.XX.....X..X.........X...X...XX..X............X..X..X....X.XX..X..X.....X.XX...X.......X....XXXX.X....XX.......XX..........X..........X....XX...X..XX.XXX.XX..X.X..X.X.XX.X....XX..XX....XX......X.XXX..................XX.XX...X......X......X..X.....XX..X.X..X...XX.X.....X.....X......X.XXXX...XX.XX...X.X.....X...X.....X.....X.X.XXXXX...X.X.X.X.X..X..X.XXXX.X.XXX.X.XXXXXXXXX...XXX.XXX.XXX...........X...............X.X...X.....X...............X.........XXX.X.X.X....X..X....X.......X.X..X........X.....X...X.........X......X..X.XXX.X.X.X.......X..X..XX.....X...........XX....X...........XXX..X..XXXXX.XXX..X.X.XX..XX.X....XXXXXXX.....X..X.X................X....X.........XX..X.XX.X.X.X....X.....XX..X..........X....XX.XX.......XX...XXXX..X....X..X.X...XX...XXXXX.XX.X..X...............X...............X....X...........X...............X......XX.X.X....X...XX.X......X...XX.X.X...X............X.........X...X..........X................X.......X.X.......X.X...X.......X.XX.X...............XXX.X.....XX..X.X.XXXX.XX....................X..X.X......X....XX......X.................XX.X..X....X.........X..XX..XX................X..XX....X......X.......X....X.X...X...XXX..........XX....XXX.....X.............XX.X...X.X.XX.X.......X...................X.....................X..X...........X..X....X....XX...XX...X..X.X..X..X.X.X....X........XX..XX........X...............X..............................X....X.....X........X....X...XX...........XX....X...XXX......X.X....XX....X.X..X.X....XXX.X...X....XX..XXXX.....XXXX.XX....................X.X...X..X....XXX..XX.XXX.XX...XX.....X........XXXXX.XXX.......X.XX.........X.X.X.X....XXX..X..XX.X.XX....XXXX.XXX.XXXX.X..X.X....XXXX.X..X..X.X..X.XXX....X.X.....XX..X....X.X.....XX....XX.XXX.X..X..XXXX.X....X.XXXX....X....XXXXX.XXX.....X....X.....X..X.XX.....X.....X.X..X.X..X.X..X........X.X....X....X.X.X.XXXXX........X..XXX.X...........X......X.XXX..............X.X...........X..............X..X........X...........XX..XXXX.XXXX.XX.X..X..X.XXX.......XX..X......X.XXXXX...X..X....XX...XXX.......X.X..X.X.....XXXXX.....X.X........X.XX.XX...X.XX.X........X.........X..XX.X............X....X.............X.X..X..X..X...X...XXX.............X.....X.X.......X.XX...XX...XX...X....X........X..X.....X...X.....X
Comment:
Expected s to always be bigger than m, and therefore not see any X chars.
open System
open System.Collections.Concurrent
open System.Threading.Tasks
#r @".\packages\Gjallarhorn.1.2.3\lib\netstandard2.0\Gjallarhorn.dll"
#r "netstandard"
open Gjallarhorn
let m1 = Mutable.createThreadsafe (box -1)
let s1 = m1 |> Signal.map (fun i -> (i :?> int) + 1)
let incr_task =
Task.Factory.StartNew
(fun () ->
for i = 0 to 1000000 do
m1.Value <- box i)
let read_tasks =
[| for i = 0 to 10 do
yield Task.Factory.StartNew
(fun () ->
for j = 0 to 100000 do
let m = m1.Value :?> int
let s = s1.Value
if s <= m then
Console.Write('X')
elif s = m + 1 then
() //Console.Write('O')
else
Console.Write('.')
)
|]
incr_task.Wait()
Task.WaitAll(read_tasks)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment