如何检测程序是否已使用-threaded编译?

Pet*_*lák 13 concurrency haskell process ghc

我正在使用一个Haskell守护进程,它使用POSIX fork/exec和文件锁定机制.我的实验表明,文件锁定期间不继承executeFile-threaded运行时(见这个线程),如果我用,不管+RTS -N与否.所以我想添加一个检查,以确保守护进程没有编译-threaded.有可行的方法来检测它吗?

Fed*_*lev 14

有一个值,Control.Concurrent这一点,例如:

module Main (main) where

import Control.Concurrent

main :: IO ()
main = print rtsSupportsBoundThreads
Run Code Online (Sandbox Code Playgroud)

并测试:

$ ghc -fforce-recomp Test.hs; ./Test
[1 of 1] Compiling Main             ( Test.hs, Test.o )
Linking Test ...
False
$ ghc -fforce-recomp -threaded Test.hs; ./Test
[1 of 1] Compiling Main             ( Test.hs, Test.o )
Linking Test ...
True
Run Code Online (Sandbox Code Playgroud)

它是C部分的源代码:

HsBool
rtsSupportsBoundThreads(void)
{
#if defined(THREADED_RTS)
  return HS_BOOL_TRUE;
#else
  return HS_BOOL_FALSE;
#endif
}
Run Code Online (Sandbox Code Playgroud)