Namensräume
Varianten
Aktionen

std::notify_all_at_thread_exit

Aus cppreference.com
< cpp‎ | thread

 
 
Thema Support-Bibliothek
Threads
Original:
Threads
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread(C++11)
this_thread Namespace
Original:
this_thread namespace
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
Gegenseitigen Ausschluss
Original:
Mutual exclusion
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
mutex(C++11)
timed_mutex(C++11)
Generische Sperrverwaltung
Original:
Generic lock management
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
Zustand Variablen
Original:
Condition variables
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
Futures
Original:
Futures
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
 
definiert in Header <condition_variable>
void notify_all_at_thread_exit( std::condition_variable& cond,
                                std::unique_lock<std::mutex> lk );
(seit C++11)
notify_all_at_thread_exit bietet einen Mechanismus, um andere Threads, dass ein bestimmtes Thema wurde komplett fertig zu benachrichtigen, einschließlich Zerstörung aller thread_local Objekte. Es funktioniert wie folgt:
Original:
notify_all_at_thread_exit provides a mechanism to notify other threads that a given thread has completely finished, including destroying all thread_local objects. It operates as follows:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
  • Eigentümer der zuvor erworbenen Schloss lk in den internen Speicher übertragen .
    Original:
    Ownership of the previously acquired lock lk is transferred to internal storage.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Die Ausführungsumgebung derart modifiziert wird, dass, wenn die aktuelle Thread beendet, nachdem die Destruktoren für alle Objekte mit Thread Local Storage Dauer genannt werden, die Bedingung variablen cond als ob durch benachrichtigt:
    Original:
    The execution environment is modified such that when the current thread exits, after the destructors for all objects with Thread Local Storage Dauer are called, the condition variable cond is notified as if by:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.

lk.unlock();
cond.notify_all();

Eine äquivalente Wirkung kann mit den Möglichkeiten std::promise oder std::packaged_task erreicht werden sollen .
Original:
An equivalent effect may be achieved with the facilities provided by std::promise or std::packaged_task.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Inhaltsverzeichnis

[Bearbeiten] Notes

Der Aufruf dieser Funktion, wenn lock.mutex() nicht durch den aktuellen Thread gesperrt ist undefiniert .
Original:
Calling this function if lock.mutex() is not locked by the current thread is undefined behavior.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Der Aufruf dieser Funktion, wenn lock.mutex() nicht das gleiche Mutex als ein von allen anderen Threads, wartet derzeit auf der gleichen Bedingung variabel ist undefiniert verwendet .
Original:
Calling this function if lock.mutex() is not the same mutex as the one used by all other threads that are currently waiting on the same condition variable is undefined behavior.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Das mitgelieferte Schloss lk wird, bis der Thread beendet gehalten. Wenn diese Funktion aufgerufen wurde, können keine weiteren Threads erwerben die gleiche Sperre um auf cond warten. Wenn einige Gewinde auf diesem Zustand wartet Variable ist, sollte er nicht versuchen, zu lösen und erneut abzurufen die Sperre, wenn sie fälschlicherweise aufwacht .
Original:
The supplied lock lk is held until the thread exits. Once this function has been called, no more threads may acquire the same lock in order to wait on cond. If some thread is waiting on this condition variable, it should not attempt to release and reacquire the lock when it wakes up spuriously.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
In typischen Anwendungsfällen ist diese Funktion das letzte, was von einem freistehenden Thread aufgerufen .
Original:
In typical use cases, this function is the last thing called by a detached thread.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[Bearbeiten] Parameter

cond -
die Bedingung Variable am Faden Ausfahrt mitzuteilen
Original:
the condition variable to notify at thread exit
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
lk -
das Schloss mit der Bedingung, variable cond verbunden
Original:
the lock associated with the condition variable cond
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[Bearbeiten] Rückgabewert

(None)
Original:
(none)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

[Bearbeiten] Beispiel

Diese partielle Codefragment veranschaulicht, wie notify_all_at_thread_exit verwendet werden, um Zugriff auf Daten, die auf dem Gewinde Einheimischen hängt während die Gewinde Einheimischen in den Prozess der zerstört sind zu vermeiden:
Original:
This partial code fragment illustrates how notify_all_at_thread_exit can be used to avoid accessing data that depends on thread locals while those thread locals are in the process of being destructed:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#include <mutex>
#include <thread>
 
std::mutex m;
std::condition_variable cv;
 
bool ready = false;
ComplexType result;  // some arbitrary type
 
void thread_func()
{
    std::unique_lock<std::mutex> lk(m);
    // assign a value to result using thread_local data
    result = function_that_uses_thread_locals();
    ready = true;
    std::notify_all_at_thread_exit(cv, std::move(lk));
} // 1. destroy thread_locals, 2. unlock mutex, 3. notify cv
 
int main()
{
    std::thread t(thread_func);
    t.detach();
 
    // do other work
    // ...
 
    // wait for the detached thread
    std::unique_lock<std::mutex> lk(m);
    while(!ready) {
        cv.wait(lk);
    }
    process(result); // result is ready and thread_local destructors have finished
}


[Bearbeiten] Siehe auch

setzt das Ergebnis spezifischer Wert und liefert die Meldung nur am Faden Ausfahrt
Original:
sets the result to specific value while delivering the notification only at thread exit
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(öffentliche Elementfunktion of std::promise) [edit]
führt die Funktion sicherzustellen, dass das Ergebnis fertig ist erst einmal die aktuelle Thread beendet
Original:
executes the function ensuring that the result is ready only once the current thread exits
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(öffentliche Elementfunktion of std::packaged_task) [edit]