C++ 11 §1.10/1 definiert die Ausdrücke:
A Ausführungsthread (auch als Gewinde bekannt) ist einen einzelnen Steuerungsfluss innerhalb eines Programms, einschließlich dem anfänglichen Aufruf einer bestimmten Top-Level-Funktion und rekursives Einschließen jedes Funktionsaufrufs, der anschließend vom Thread ausgeführt wird.[] Hinweis: Wenn ein Thread einen anderen erstellt, wird der erste Aufruf der Top-Level-Funktion des neuen Threads vom neuen Thread ausgeführt, nicht vom erzeugenden Thread. - Endnote]
Die kursiven Begriffe zeigen, dass dies definitiv ist. Man könnte argumentieren, dass diese Definition mathematisch mangelhaft ist, weil jeder Funktionsaufruf einen neuen Thread definiert, aber das ist offensichtlich falsch. Sie bedeuten maximal einzigen Fluss der Kontrolle, sonst würde die nicht normative Note den Effekt der normativen "rekursiv einschließlich" Text aufheben.
Vom Standpunkt der Kernsprache ist es nur nebensächlich, dass std::thread
solch eine Sache verursacht.
Was passiert, wenn ich eine Bibliothek verwenden, die Themen User-Space bietet - jedes von denen seine eigenen Kopien von thread_local
Objekten bekommen (ich nicht wirklich sehen, wie das umgesetzt werden könnte)?
Es gibt keine Möglichkeit, eine solche Bibliothek ohne Kernelaufrufe zu schreiben. Aller Wahrscheinlichkeit nach sind alle Threads in Ihrem Prozess bereits eine High-Level-Abstraktion wie Pthreads, um den Kernel zu befriedigen. Die C++ - Standardbibliothek wird wahrscheinlich gegen die native Threading-Bibliothek geschrieben, um ohne zusätzlichen Kleber "einfach zu funktionieren". B. Objekte werden beim ersten Zugriff und nicht beim Start jedes neuen Threads initialisiert. Daher muss der Compiler nur eine Abfrage basierend auf pthread_self
einfügen, um darauf zuzugreifen und möglicherweise zu initialisieren. Die Initialisierung würde einen Destruktor mit der pthread_cleanup
Einrichtung registrieren.
Was ist implementation-defined hier ist, ob die bereits vorhandene native Bibliothek mit C++ kompatibel ist. Angenommen, sie stellen dies bereit, und es ist etwas, das die Kunden gerne hätten, und alle anderen Threading-Bibliotheken, die darauf aufbauen, werden automatisch kompatibel sein, abgesehen von anderen Konflikten.
@texasbruce Java * jetzt * hat diese Schlüsselwörter? Sie waren dort vor 17 Jahren. – EJP