Welche Unix haben kein thread-sicheres malloc?

8

Ich möchte, dass mein C-Programm auch auf einem sehr alten Unix-Betriebssystem portierbar ist, aber das Problem ist, dass ich pThreads und die dynamische Zuweisung (malloc) verwende. Alle Unix, von denen ich weiß, haben einen thread-sicheren malloc (Linux, * BSD, Irix, Solaris), aber das ist nicht durch den C-Standard garantiert, und ich bin mir sicher, dass es sehr alte Versionen gibt, wo das nicht stimmt.

>

Also, gibt es eine Liste von Plattformen, die ich malloc () -Aufrufe mit einer Mutex-Sperre umschließen müsste? Ich plane, einen ./configure Test zu schreiben, der prüft, ob gegenwärtige Plattform in dieser Liste ist.

Die andere Alternative wäre, malloc () auf Thread-Sicherheit zu testen, aber ich kenne keinen deterministischen Weg, dies zu tun. Irgendwelche Ideen zu diesem auch?

    
jimis 12.05.2013, 17:05
quelle

1 Antwort

6

Der einzige C-Standard, der Threads hat (und somit für Ihre Frage relevant sein kann), ist C11, der besagt:

  

Zum Bestimmen der Existenz eines Datenrennens, Speicher   Zuweisungsfunktionen verhalten sich so, als hätten sie nur auf Speicher zugegriffen   Orte, auf die über ihre Argumente zugegriffen werden kann, und nicht andere statische   Dauerspeicher.

Oder mit anderen Worten, solange zwei Threads die gleiche Adresse nicht an realloc oder free übergeben, sind alle Aufrufe der Speicherfunktionen threadsicher.

Für POSIX, das sind alle Unixes, die Sie heutzutage finden können:

  

Jede Funktion, die im Systemschnittstellen-Volume von IEEE Std 1003.1-2001 definiert ist, ist Thread-sicher, sofern nicht ausdrücklich anders angegeben.

Ich weiß nicht, woher Sie Ihre Behauptung nehmen, dass malloc für ältere Unixe nicht Thread-sicher wäre, ein System mit Threads, das diesen Thread-Safe nicht implementiert, ist ziemlich nutzlos. Was auf solch einem älteren System ein Problem sein könnte, ist die Leistung, aber es sollte immer funktionieren.

    
Jens Gustedt 12.05.2013, 20:48
quelle

Tags und Links