Код: Выделить всё
#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();
}
Для любых двух оценок A и B, если A располагается перед B (или, что то же самое, B располагается после A), то выполнение A должно предшествовать выполнению B.
В t1 должно предшествовать выполнение #1 выполнение №2. Аналогично, в t2 выполнение #3 должно предшествовать выполнению #4.
time.clock.req сообщает:
функция now() для получения текущей точки времени.
- Возвращает объект time_point, представляющий текущую точку в time.
Поскольку последовательность-before, #1 выполняется где-то до момента времени, обозначенного now1, а #4 выполняется где-то после момента времени, обозначенного now2. Если now1 < now2, можем ли мы это сделать?
Код: Выделить всё
#1Обратите внимание, что использованное здесь слово «before» не ничего не означает в отношении видимости или порядка, определенного стандартом C++. Здесь просто обсуждается взаимосвязь между временем выполнения таких двух операций.
Итак, два вопроса с точки зрения абстрактной машины:
- Означает ли значение, возвращаемое из now(), глобальный момент времени всей программы, даже если задействовано несколько потоков?
- Если первый вопрос положительный, позволяет ли now1 < now2 сделать вывод, что #1 выполняется когда-то до момент времени, когда выполняется #4?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-global
Мобильная версия