Совместное использование памяти нитями Idris - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь разделить доступную для записи память между потоками в idris, и я не могу этого сделать.Возможно ли это?

Следующее приводит к ошибке: idris20022-6: idris_rts.c: 967: doCopyTo: сбой утверждения `0 '.

module Threads

--this doesn't work, because the waitAndRead thread can't read the ioref

import System.Concurrency.Channels
import System
import Data.IORef

waitAndRead : IORef Int -> IO ()
waitAndRead x = do
  usleep $ 500*1000
  v <- readIORef x
  putStrLn $ "V is " ++ show v



main : IO ()
main =
  do 
    x <- newIORef 0
    mpid <- spawn (waitAndRead x)
    usleep $ 100 * 1000
    case mpid of
      Just mpid => writeIORef x 1
      Nothing => putStrLn "Can't spawn!"
    usleep $ 1000 * 1000
    putStrLn "Done!"
...