Die Dokumentation für getErrno
lautet:
Ermittelt den aktuellen Wert von errno im aktuellen Thread.
Es ist mir unklar, ob dies den aktuellen OS -Thread bedeutet. Wird die% -Zeit% (%) von der (Thread-) Laufzeit abgerufen und gespeichert, wenn ein Haskell-Thread von einem Betriebssystem-Thread in einen anderen migriert wird?
Diese Frage scheint verwandt zu sein, aber es ist mir unklar, ob das, was dort gesagt wird, OS- oder Haskell-Threads betrifft.
Bei neueren GHC-Versionen speichert die Laufzeitumgebung errno
im Threadspeicherobjekt ( TSO
) und kümmert sich um deren Verwaltung, wenn ein Laufzeitthread in einen anderen Betriebssystemthread migriert wird. Das bedeutet, dass es sicher sein sollte, sich sowohl in ungebundenen ( errno
) als auch in gebundenen ( forkIO
) Threads auf forkOS
zu verlassen. Hier ist ein Test für Linux:
err.hs
err.c
Kompilieren mit:
%Vor%Und das Ergebnis sollte etwa so aussehen:
%Vor% Die OS-Thread-IDs werden am Anfang jeder Zeile gedruckt. Beachten Sie, dass errno
von 3
in den zweiten Betriebssystem-Thread ( 12283
) migriert wurde.
Tags und Links haskell ghc multithreading errno