Bezeichnet der von „std::steady_clock::now()“ zurückgegebene Wert einen Punkt in der globalen Zeit des Programms?C++

Programme in C++. Entwicklerforum
Anonymous
 Bezeichnet der von „std::steady_clock::now()“ zurückgegebene Wert einen Punkt in der globalen Zeit des Programms?

Post by Anonymous »

Betrachten Sie dieses Beispiel:

Code: Select all

#include 
#include 
#include 

uint64_t timestamp() {
auto now = std::chrono::steady_clock::now().time_since_epoch();
return std::chrono::duration_cast(now).count();
}

int main() {
std::atomic val;
long int now1, now2;
auto t1 = std::thread([&]() {
val.store(1); // #1
now1 = timestamp(); // #2
});
auto t2 = std::thread([&]() {
now2 = timestamp(); // #3
val.load(); // #4
});
t1.join();
t2.join();
}
intro.execution p8 sagt:

Wenn zwei beliebige Auswertungen A und B gegeben sind und A vor B sequenziert wird (oder, äquivalent, B nach A sequenziert wird), dann soll die Ausführung von A der Ausführung von B vorausgehen.

In t1 soll die Ausführung von #1 der Ausführung vorausgehen von #2. Ebenso muss in t2 die Ausführung von #3 der Ausführung von #4 vorausgehen.
time.clock.req sagt:

eine Funktion now(), um den aktuellen time_point zu erhalten.
  • Gibt ein time_point-Objekt zurück, das den aktuellen Zeitpunkt darstellt.

Da die Sequenz-vorher #1 irgendwann vor dem durch now1 bezeichneten Zeitpunkt ausgeführt wird und #4 irgendwann nach dem durch now2 bezeichneten Zeitpunkt ausgeführt wird. Wenn now1 < now2, können wir daraus schließen?

Code: Select all

#1
wird irgendwann vor dem Zeitpunkt ausgeführt, zu dem #4 ausgeführt wird

Beachten Sie, dass das hier verwendete „before“ nicht etwas über die Sichtbarkeit oder die durch den C++-Standard definierte Reihenfolge bedeutet. Es wird lediglich die Beziehung zwischen dem Zeitpunkt der Ausführung dieser beiden Operationen besprochen.
Also zwei Fragen aus der Perspektive der abstrakten Maschine:
  • Bezeichnet der von now() zurückgegebene Wert einen globalen Zeitpunkt des gesamten Programms, auch wenn mehrere Threads beteiligt sind?
  • Wenn die erste Frage „Ja“ lautet, lässt sich daraus dann schließen, dass #1 irgendwann zuvor ausgeführt wurde? der Zeitpunkt, an dem #4 ausgeführt wird?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post