【发布时间】:2016-12-02 10:55:26
【问题描述】:
std::chrono::steady_clock 的单调属性是否跨线程保留?例如,假设我有以下程序。
#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;
}
我可以假设最后具有较小time 值的线程(假设它们具有不同的值)在另一个之前修改了i,并且另一个看到i,因为它是由第一个?
【问题讨论】:
-
'auto'的意思是把时间放到栈上,函数返回时丢弃吗?
-
@Marichyasana
auto只是指示编译器自动推断类型的简写,这样我就不必键入它。如果你不喜欢它,假设你有steady_clock::time_point而不是auto。当然变量是自动的,所以在线程结束时被丢弃,但假设我有一些方法来报告它并决定,比较时间戳,哪个线程之前执行。我可以从steady_clock单调性得到保证吗? -
我从来没有见过一个时钟有时会倒转,有时会前进。
-
@Marichyasana 有很多。现在,
steady_clock保证它永远不会这样做,这意味着如果你调用它两次,第一次调用将返回一个不大于第二次的值。但我不明白这种保证是否延伸到不同的线程,这就是我要问的。 -
(对不起,我的意思是夏令时,不是闰年:p 脑子放屁)
标签: c++ multithreading clock