gpt4 book ai didi

haskell - 与调用 select() 的代码交互

转载 作者:行者123 更新时间:2023-12-02 16:27:16 25 4
gpt4 key购买 nike

我正在编写一个与某些库的 Haskell 绑定(bind),并且有一个函数 void foo(),它在内部调用 select()。当我从 Haskell 调用此函数时,select() 调用开始不断返回 EINTR。这会混淆库代码并开始永远循环。

#haskell IRC channel 中,我被告知要从绑定(bind)线程运行foo()。我为此使用了 runInBoundThread ,现在一切似乎都正常。但在极少数情况下,我会在控制台中收到闹钟消息(好吧,我发现这意味着应用程序捕获了 SIGALRM)。

我不确定这是否是处理此问题的正确方法,并且我不想依赖 Control.Concurrency。我该怎么办?

最佳答案

SIGALRM 的原因是 GHC 运行时使用旧代码路径来管理计时器内容。这个旧的代码路径之所以打开,是因为 GHC 的配置脚本在检查 create_timer() 函数时具有某种 linuxism。修复它使 GHC 使用所有平台上使用的相同机制,并消除了相关错误。

相关提交:https://gitlab.haskell.org/ghc/ghc/-/commit/edc059a425068f9bf4a60520e8d8906bc764e2b5

关于haskell - 与调用 select() 的代码交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com