的单调性质是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
因为它是第一个留下的?
标准[时间.时钟.稳定]
...
static constexpr bool is_steady = true;
static time_point now() noexcept;
...
is_steady 在所有实现中都必须为 true(即,如果操作系统等不支持该类,则该类不能以 false 存在),并且两个成员都独立于实例。
标准[time.clock.req]:
时钟要求
...
C1和C2表示时钟类型。 t1 和 t2 是 C1::now() 返回的值,其中返回 t1 的调用发生在之前(1.10)返回 t2 的调用并且这两个调用都发生在 C1::time_-point::max() 之前。
...
C1::is_steady:如果 t1
1.10部分包含:
多线程执行和数据竞争
...
如果满足以下条件,则评估 A 在评估 B 之前发生:
A 在 B 之前排序,或者
A 线程间发生在 B 之前。
...
评估 A 线程间发生在评估 B 之前,如果
A 同步与 B,或
...
我认为不需要在这里复制同步(互斥体应该足以满足这一点),
so: Yes, 没关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)