C++ 任何时候函数都保证为调用返回不同的值

C++ 任何时候函数都保证为调用返回不同的值,c++,linux,multithreading,C++,Linux,Multithreading,我正在寻找一个时间函数,它保证为不同的调用返回不同的值。我在LINUX上尝试了下面的方法,结果发现它不是我想要的,它可能会为来自不同线程的调用返回相同的值 long GetTickCount() { struct timespec now; clock_gettime(MONOTONIC, &now); return now.tv_sec * 1000000000LL + now.tv_nse

我正在寻找一个时间函数,它保证为不同的调用返回不同的值。我在LINUX上尝试了下面的方法,结果发现它不是我想要的,它可能会为来自不同线程的调用返回相同的值

   long GetTickCount()        
   {          
        struct timespec now;
        clock_gettime(MONOTONIC, &now);
        return now.tv_sec * 1000000000LL + now.tv_nsec;
   }

在LINUX上是否还有其他方法可以做到这一点?

任何时钟的粒度都是有限的,这可能会导致连续调用返回相同的值。为了解决这个问题,您需要使用全局计数器:

static long long previous_time = 0;

long long get_strictly_monotonic_time() {
    int rc;
    struct timespec tp;
    long long t;
    rc = clock_gettime(CLOCK_MONOTONIC, &tp);
    if(rc < 0) return -1;
    t = tp.tv_sec * 1000000000LL + tp.tv_nsec;
    /* Critical region */
    if(t <= previous_time)
        t = previous_time + 1;
    previous_time = t;
    /* End of critical region */
    return t;
}
static long long previous_time=0;
long long get_严格单调时间(){
int rc;
struct-timespec-tp;
长t;
rc=时钟获取时间(时钟单调,&tp);
如果(rc<0)返回-1;
t=tp.tv_sec*1000000000LL+tp.tv_nsec;
/*临界区*/

如果(t第一个发现应该是搜索,对吗?你得到的最多的是一个单调计数器,你必须自己用任何必要的信息来增加它,以使其唯一。
单调
不能保证每次调用都得到不同的值。这取决于实际的定时分辨率。你确定,你在解决基本问题吗m、 不是症状?为什么不使用联锁计数器?在C++11中,可以使用
std::chrono::high_resolution\u clock::now()
,这可能会提供更好的分辨率。