- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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
是第一个留下的吗?
最佳答案
标准 [time.clock.steady]
...
static constexpr bool is_steady = true;
static time_point now() noexcept;
...
is_steady 在所有实现中都必须为真(即,如果操作系统等不支持该类,则该类不能为假),并且两个成员都独立于实例。
标准 [time.clock.req]:
Clock requirements
...
C1 and C2 denote clock types. t1 and t2 are values returned by C1::now() where the call returning t1 happens before (1.10) the call returning t2 and both of these calls occur before C1::time_-point::max().
...
C1::is_steady: true if t1 <= t2 is always true and the time between clock ticks is constant, otherwise false.
1.10部分包含:
Multi-threaded executions and data races
...
An evaluation A happens before an evaluation B if:
A is sequenced before B, or
A inter-thread happens before B.
...
An evaluation A inter-thread happens before an evaluation B if
A synchronizes with B, or ...
我不认为需要在这里复制同步(一个互斥量应该足以实现),
所以:是的,没关系。
关于c++ - steady_clock 跨线程是单调的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40930541/
我正在寻找一种快速方法来使 pandas 数据帧在 x 中单调。 我当前的解决方案如下: def make_monotonic(df, cols=None): """make df monot
CLOCK_REALTIME 的一个问题是它不是单调的,如果发生 NTP 同步,时间可能会倒退。 像下面这样的事情让它变得单调是否安全? struct timespec GetMonotonicTim
我是一名优秀的程序员,十分优秀!