Namensräume
Varianten
Aktionen

std::latch

Von cppreference.com
< cpp‎ | thread
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
latch
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 
 
Definiert in Header <latch>
class latch;
(seit C++20)

Die Klasse latch ist ein absteigender Zähler vom Typ std::ptrdiff_t, der zur Synchronisation von Threads verwendet werden kann. Der Wert des Zählers wird bei der Erstellung initialisiert. Threads können auf dem Latch blockieren, bis der Zähler auf null dekrementiert wird. Es gibt keine Möglichkeit, den Zähler zu erhöhen oder zurückzusetzen, was den Latch zu einer Einweg-Barriere macht.

Gleichzeitige Aufrufe der Memberfunktionen von std::latch, mit Ausnahme des Destruktors, führen keine Datenrennen ein.

Inhalt

[bearbeiten] Datenmember

Name Definition
std::ptrdiff_t counter der interne Zähler
((exposition-only member object*)

[bearbeiten] Memberfunktionen

konstruiert einen latch
(öffentliche Memberfunktion) [bearbeiten]
zerstört den latch
(öffentliche Memberfunktion) [bearbeiten]
operator=
[gelöscht]
latch ist nicht zuweisbar
(öffentliche Memberfunktion)
dekrementiert den Zähler nicht-blockierend
(öffentliche Memberfunktion) [bearbeiten]
prüft, ob der interne Zähler null ist
(öffentliche Memberfunktion) [bearbeiten]
blockiert, bis der Zähler null erreicht
(öffentliche Memberfunktion) [bearbeiten]
dekrementiert den Zähler und blockiert, bis er null erreicht
(öffentliche Memberfunktion) [bearbeiten]
Konstanten
[static]
der maximale Wert des Zählers, der von der Implementierung unterstützt wird
(öffentliche statische Memberfunktion) [bearbeiten]

[bearbeiten] Hinweise

Feature-Test-Makro Wert Std Feature
__cpp_lib_latch 201907L (C++20) std::latch

[bearbeiten] Beispiel

#include <functional>
#include <iostream>
#include <latch>
#include <string>
#include <thread>
 
struct Job
{
    const std::string name;
    std::string product{"not worked"};
    std::thread action{};
};
 
int main()
{
    Job jobs[]{{"Annika"}, {"Buru"}, {"Chuck"}};
 
    std::latch work_done{std::size(jobs)};
    std::latch start_clean_up{1};
 
    auto work = [&](Job& my_job)
    {
        my_job.product = my_job.name + " worked";
        work_done.count_down();
        start_clean_up.wait();
        my_job.product = my_job.name + " cleaned";
    };
 
    std::cout << "Work is starting... ";
    for (auto& job : jobs)
        job.action = std::thread{work, std::ref(job)};
 
    work_done.wait();
    std::cout << "done:\n";
    for (auto const& job : jobs)
        std::cout << "  " << job.product << '\n';
 
    std::cout << "Workers are cleaning up... ";
    start_clean_up.count_down();
    for (auto& job : jobs)
        job.action.join();
 
    std::cout << "done:\n";
    for (auto const& job : jobs)
        std::cout << "  " << job.product << '\n';
}

Ausgabe

Work is starting... done:
  Annika worked
  Buru worked
  Chuck worked
Workers are cleaning up... done:
  Annika cleaned
  Buru cleaned
  Chuck cleaned

[bearbeiten] Siehe auch

(C++20)
wiederverwendbare Thread-Barriere
(Klassenvorlage) [bearbeiten]