Pracuję nad demonem Haskell, który wykorzystuje POSIX fork/exec wraz z mechanizmem blokowania plików. Moje eksperymenty pokazują, że blokady plików nie są dziedziczone podczas wykonywania executeFile
z runtime -threaded
(zobacz także this thread), bez względu na to, czy używam +RTS -N
czy nie. Dlatego chciałbym dodać czek, aby upewnić się, że demon nie jest skompilowany z -threaded
. Czy istnieje przenośny sposób na wykrycie tego?Jak wykryć, czy program został skompilowany przy użyciu -readread?
13
A
Odpowiedz
13
Jest value w Control.Concurrent
za to, na przykład:
module Main (main) where
import Control.Concurrent
main :: IO()
main = print rtsSupportsBoundThreads
i przetestować:
$ 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
I to jest C-część source code:
HsBool
rtsSupportsBoundThreads(void)
{
#if defined(THREADED_RTS)
return HS_BOOL_TRUE;
#else
return HS_BOOL_FALSE;
#endif
}
1
To jest brudny siekać i może być przenośny, ale nie mogę potwierdzić, że pracuje dla ghc-7.6.3 w systemie Linux:
isThreaded :: IO (Maybe Bool)
isThreaded = do
tid <- forkIO $ threadDelay 1000000
yield
stat <- threadStatus tid
killThread tid
case stat of
ThreadBlocked BlockedOnMVar -> return (Just True)
ThreadBlocked BlockedOnOther -> return (Just False)
_ -> return Nothing
Zobacz BlockedOnOther docstring szczegóły.
Powiązane problemy
- 1. Jak sprawdzić, czy program został skompilowany z symbolami debugowania?
- 2. Dowolny sposób określania, kiedy program .net został skompilowany/zbudowany
- 3. Jak rozpoznać, czy Swift został skompilowany z Optymalizacją
- 4. przy użyciu stat, aby wykryć, czy plik istnieje (wolno?)
- 5. Określa, czy plik .class został skompilowany z informacjami debugowania?
- 6. Jak uruchomić program abc.exe przy użyciu php
- 7. dlaczego rdzenia angularjs trzeba wykryć, czy moduł ngLocale został utworzony?
- 8. wykryć tętno przy użyciu iPhone Camera
- 9. Dowolna licencja na mój skompilowany program gcc?
- 10. Jak wykryć, czy Android MapView został przesunięty lub powiększony?
- 11. Jak wykryć, czy obiekt został śmieci zebrane w JavaScript?
- 12. Jak wykryć, czy użytkownik został wybrany z opcji createChooser?
- 13. Jak wykryć, czy przycisk usuwania UItableviewcell został ukryty?
- 14. Czy można rozwijać program SharePoint przy użyciu technik ciągłej integracji?
- 15. Błąd programu Hiphop podczas pracy programu został skompilowany
- 16. Okno WPF. Jak wykryć pierwszy program?
- 17. Zainstaluj program elasticsearch 1.1 przy użyciu brew
- 18. Python - Jak można wykryć, że moduł został załadowany przez niestandardowy program ładujący?
- 19. c Program ++ przy użyciu GMP bibliotekę
- 20. jak wykryć, który przycisk jest wciśnięty przy użyciu jQuery
- 21. Czy jest łatwiejsze do inżynierii wstecznej lub złamać program Delphi, jeśli plik exe został skompilowany z ustawieniami kompilatora debugowania?
- 22. Jak zatrzymać program skompilowany przy pomocy MinGW (g ++) przez otwarcie okna konsoli w Windows
- 23. wykryć, czy Zapora systemu Windows blokuje mój program
- 24. Jak uruchomić program Power Shell przy użyciu tytułu okna?
- 25. Określanie minimalnej wersji OSX binarny został skompilowany dla
- 26. Jak ustalić, czy zestaw .NET został skompilowany jako x86, x64 lub dowolny procesor
- 27. Skrypt nie został skompilowany, jeśli znajduje się w podfolderze?
- 28. Czy istnieje sposób sprawdzenia, czy python został skonfigurowany i skompilowany z "--with-threads -enable-shared"?
- 29. Jak mogę sprawdzić, czy mój program jest skompilowany dla procesora 32- lub 64-bitowego?
- 30. Jak wykryć, czy ciąg znaków jest w formacie adresu URL przy użyciu javascript?
'setNumCapabilities 2' i sprawdź, czy 'getNumCapabilities' zwraca 1? – Yuras