Gibt es eine definitive Liste von Funktionen, die in der Mac OS X-Implementierung der C-Standardbibliothek Thread-sicher sind?
Es gibt eine gute Antwort hier in Bezug auf glibc
und f*()
Funktionen speziell, aber ich habe es versäumt um eine solche Ressource in Bezug auf OS X zu finden. Gibt es so etwas?
Sind zum Beispiel strptime()
und strftime()
Thread-sicher? %Code%? Dies sind einige, die interne Puffer haben können, die ich nicht durcheinander bringen möchte. :)
Die Single Unix Specification gibt eine ziemlich kurze Liste von Funktionen, die nicht Threads sein dürfen -safe (mit der Ausnahme, dass Funktionen in der "Legacy Feature Group" nicht Thread-sicher sein dürfen, obwohl sie dort nicht aufgelistet sind). Die Liste enthält strtok()
, was Dave in seiner Antwort erwähnt, aber enthält nicht strptime()
, noch strftime()
oder printf()
.
Diese StackOverflow-Antwort behauptet, als Reaktion auf eine dieser Frage ziemlich ähnliche Frage, die OS X unterstützt der obige Aspekt der Spezifikation, so denke ich, dass das wahrscheinlich die beste Liste ist zu verwenden. (Sie werden wahrscheinlich auch an dem Rest dieser Frage interessiert sein, und in der anderen Antwort nebenbei.)
Jede Funktion, die magisches Erinnerungsvermögen zu haben scheint, ist wahrscheinlich nicht threadsicher. Jede Funktion, die einen Zeiger zurückgibt, den Sie nicht erwarten, free()
ist sehr häufig nicht Thread-sicher.
Viele der Funktionen, um die Sie sich wirklich kümmern müssen, geben char*
oder struct foo*
zurück. Obwohl dies keine perfekte Regel ist, weist dies oft auf eine Funktion hin, die eine Art statischen Speicher aufweist und nicht Thread-sicher ist.
strtok()
ist ein einfaches Beispiel für is, gefolgt von strtok_r()
, das Thread-sicher ist. Für viele nicht thread-sichere Funktionen gibt es ein function_r()
(r für reentrant), das ist.
Tags und Links c thread-safety macos standard-library