【问题标题】:running 2 processes in parallel on haskell在haskell上并行运行2个进程
【发布时间】:2021-08-24 02:19:24
【问题描述】:

我想并行运行 2 个进程,一个等待输入,一旦它得到它就改变一个变量的状态,另一个进程不断在屏幕上打印一些东西,两者都以一种方式进行通信,第一个进程收集的输入可以修改其他进程在屏幕上打印的内容

问题是我希望第二个进程在屏幕上不断打印,而另一个进程正在等待输入,但我唯一得到的是第二个进程阻塞,直到第一个进程获得输入然后继续,我正在使用窗户

main = do
    r <- newMVar (4,4)
    forkIO (act1 r)
    act2 r
  where
    act1 r = forever $ do
        dot <- takeMVar r
        c <- getCharNoBuffering 
        putMVar r (newDot dot c)
    
    act2 r = do
        forM_ [1..20] $ \_ -> do
            dot <- takeMVar r
            print (position dot)
            putMVar r (newDot dot)

【问题讨论】:

    标签: concurrency parallel-processing


    【解决方案1】:

    当您在act1 中执行takeMVar 时,它会将其删除,这样act2 就无法将其打印出来。我会将act1 更改为modifyMVar,然后等到你有了新角色。对于act2,您也可以使用readMVar,因为没有理由删除并重新插入该值。

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多