Ich versuche, etwas Bibliothekscode zu schreiben, der von Leuten benutzt werden kann, die Pthreads aktiviert haben (oder nicht), und von Leuten, die openmp Unterstützung haben (oder nicht). Ich habe eine Variable, die ich wirklich im thread-lokalen Speicher sein möchte. Gibt es einen möglichen Schaden dies zweimal in spezifizieren, zum BeispielRedundante __thread und omp threadlokale Deklaration
#ifdef __GNUC__
# define PREFIX __thread
#elif __STDC_VERSION__ >= 201112L
# define PREFIX _Thread_local
#elif defined(_MSC_VER)
# define PREFIX __declspec(thread)
#else
# define PREFIX
#endif
PREFIX int var = 10;
#pragma omp threadprivate(var)
(Hinweis: das Geschäft des TLS-Präfix, um herauszufinden, aus How to declare a variable as thread local portably? genommen)
Ich weiß, das funktioniert auf meinem System (Debian mit dem letzten gcc), aber es ist schwer zu wissen, ob etwas anders schief gehen könnte, da diese Compiler-spezifischen Deklarationen nicht Teil des OpenMP-Standards sind.
Warum suchen Sie nicht zuerst nach dem C-Standard, dann nach Compiler-Erweiterungen? – Olaf
@Olaf Ich passte einfach so, wie es in der anderen SO-Frage vorgeschlagen wurde, die ich verlinkt hatte. Jedenfalls glaube ich nicht, dass es für die Frage, die ich hier stelle, wichtig ist. –
Nun, folgen Sie nicht einem Muster, wenn Sie nicht wissen, was es tut. Es ist im Allgemeinen schlecht, Erweiterungen zu verwenden, wenn eine Funktion vom Standard bereitgestellt wird. Benutze immer zuerst den allgemeinsten Weg. – Olaf