C++ 11 §1.10/1 określa warunki:
wątek wykonania (znany również jako nici) jest pojedynczym przepływem kontroli w programie, w tym początkowym wywołanie konkretnej funkcji najwyższego poziomu i rekursywnie włączając wszystkie wywołania funkcji wykonywane następnie przez wątek.[Uwaga: Gdy jeden wątek tworzy inny, początkowe wywołanie funkcji najwyższego poziomu nowego wątku jest wykonywane przez nowy wątek, a nie przez tworzony wątek. - koniec uwaga]
W kursywą warunki wskazują, że jest to ostateczne. Można argumentować, że ta definicja jest matematycznie niewystarczająca, ponieważ każda inwokacja funkcji definiuje nowy wątek, ale jest to oczywiście błędne. Chodzi o pojedynczy przepływ kontroli, w przeciwnym razie nienormatywna nuta anulowałaby efekt normatywnego tekstu "rekursywnie włącznie".
Z punktu widzenia języka podstawowego, jest tylko przypadkowe, że takie coś istnieje. std::thread
Co jeśli używam biblioteki, która zapewnia łatwy wątki przestrzeń - czy każdy z tych dostać swoje kopie thread_local
obiektów (I naprawdę nie rozumiem, jak to może być realizowane)?
Nie ma sposobu na napisanie takiej biblioteki bez wywołań jądra. Najprawdopodobniej wszystkie wątki w twoim procesie są już reprezentowane przez abstrakcję wysokiego poziomu, taką jak pthreads, tylko po to, aby zadowolić jądro. Biblioteka standardowa C++ jest prawdopodobnie napisana w stosunku do rodzimej biblioteki wątków do "po prostu działa" bez dodatkowego kleju.
Na przykład obiekty thread_local
są inicjowane przy pierwszym dostępie, a nie przy każdym nowym wątku, więc kompilator musi tylko wstawić zapytanie oparte na pthread_self
, aby uzyskać dostęp i być może zainicjować. Inicjalizacja rejestrowałaby destruktor w obiekcie pthread_cleanup
.
Definicja implementacji określa, czy istniejąca biblioteka natywna jest zgodna z C++. Przypuśćmy, że to zapewnią, a jest to coś, czego klienci chcieliby mieć, wszystkie inne biblioteki wątków wbudowane w nie będą automatycznie kompatybilne z innymi konfliktami.
@texasbruce Java * teraz * zawiera te słowa kluczowe? Byli tam 17 lat temu. – EJP