Sind monotone Eigenschaften von std::chrono::steady_clock
über Gewinde erhalten? Angenommen, ich habe das folgende Programm.Ist steady_clock monoton über Threads?
#include <chrono>
#include <mutex>
#include <thread>
using namespace std;
using namespace chrono;
mutex m;
int i = 0;
void do_something(int &x) {
x += 1;
}
void f1() {
unique_lock<mutex> lock(m);
auto time = steady_clock::now();
do_something(i);
}
void f2() {
unique_lock<mutex> lock(m);
auto time = steady_clock::now();
do_something(i);
}
int main() {
thread t1(f1);
thread t2(f2);
t1.join();
t2.join();
return 0;
}
Kann ich davon ausgehen, dass der Thread, den den kleineren time
Wert am Ende hat (unter der Annahme sie überhaupt anderen Wert hat) geändert i
vor dem anderen, und dass die anderen Säge i
, wie es durch die ersten links wurde ?
Bedeutet 'automatisch', die Zeit auf den Stapel zu legen und zu verwerfen, wenn die Funktion zurückkehrt? – Marichyasana
@Marichyasana 'auto' ist nur eine Kurzform, um den Compiler anzuweisen, den Typ automatisch abzuleiten, so dass ich ihn nicht eingeben muss. Angenommen, Sie haben 'steady_clock :: time_point' anstelle von' auto', wenn Sie es nicht mögen. Natürlich ist die Variable automatisch und wird daher am Ende des Threads verworfen, aber angenommen, ich habe eine Möglichkeit, sie zu melden und zu entscheiden, indem ich die Zeitstempel vergleiche, welchen Thread zuvor ausgeführt wurde. Kann ich von der Monotonie "steady_clock" garantieren? –
Ich habe noch nie eine Uhr gesehen, die einige Zeit rückwärts läuft und einige Zeit weiterläuft. – Marichyasana