小编bar*_*lle的帖子

如何控制Haskell中的主要OS线程?

我试图在程序中嵌入一个ruby1.9解释器.我目前正在使用forkOS我的hruby软件包,但似乎这只适用于ruby 1.8和2.x. 看起来1.9需要在主线程中执行.作为一个侧节点,没有文档说明如何做这样的事情,因此唯一指向我当前问题的指针就在这里.

有没有办法控制主线程来运行我的所有FFI调用?

haskell

10
推荐指数
1
解决办法
199
查看次数

确保IO计算在特定线程中运行

我需要确保某些操作在特定的OS线程上运行。我编写了一个API,该线程在其中运行一个循环,监听a TQueue并执行给定的命令。从API用户的角度来看,有一个不透明的值实际上只是该队列上的一个新类型。

一个问题是,我真正需要的是嵌入任意动作(类型IO a),但是我相信我不能直接交换该类型的消息。所以我目前有这样的东西(伪代码):

makeSafe :: RubyInterpreter -> IO a -> IO (Either RubyError a)
makeSafe (RubyInterpreter q) a = do
    mv <- newEmptyTMVarIO
    -- embedded is of type IO (), letting me send this in my queue
    let embedded = handleErrors a >>= atomically . putTMVar mv
    atomically (writeTQueue q (SomeMessage embedded))
    atomically (readTMVar mv)
Run Code Online (Sandbox Code Playgroud)

(有关更多详细信息,这是针对hruby软件包的)

编辑-澄清:

  • 能够发送类型的动作IO a会更好,但这不是我的主要目标。
  • 我的主要问题是,您可以使用此API makeSafe步履蹒跚,例如,如果IO操作中有一个调用作为参数传递,则该调用将挂起。
  • 我的第二个问题是,这种解决方案感觉有些虚构,我想知道周围是否有更好或更安全的解决方案。

haskell

5
推荐指数
0
解决办法
134
查看次数

标签 统计

haskell ×2