'getErnno' und Threads

8

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.

    
gspr 27.01.2013, 18:03
quelle

1 Antwort

7

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

%Vor%

err.c

%Vor%

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.

    
jekor 27.01.2013, 23:22
quelle

Tags und Links