c - gettimeofday clock_gettime 生成唯一编号的解决方法

标签 c linux unique gettimeofday

我的进程运行多个实例(进程)和多个线程,它们都写入同一个数据库。一旦发出请求,就会为要添加到专有数据库的记录生成一个唯一的请求 ID。这是我们的限制:长度不能超过 9 个字符,前 6 个字符必须是 hhmmss。我们决定对最后 3 位数字使用 ms 来完成 9 个字符,并且我们正在使用 gettimeofday() 来完成所有这些工作。但是,随着流量的增加,现在在 ms 周期内放置多个请求时会发生冲突。这与 gettimeofday() 本身不准确的事实相结合导致碰撞次数增加。我尝试使用 clock_gettime,但在测试时,它也不像我从以下测试程序中观察到的那样准确:

  • 由于线程问题,我们无法使用静态或全局变量
  • 无法使用随机数,因为它们需要连续

感谢任何帮助。

#include <time.h>

int main( int argc, char **argv )
{
    long i;
    struct timespec start, stop;
    double gap;

    clock_gettime( CLOCK_REALTIME, &start);

    for (i =0; i< 123456789 ; i++);

    clock_gettime( CLOCK_REALTIME, &stop);

    gap = ( stop.tv_sec - start.tv_sec ) + ( stop.tv_nsec - start.tv_nsec ) / 1000000;
    printf( "%lf ms\n", gap );
    return 0;
}

最佳答案

您所描述的问题类型已经通过发布 UUID 或多或少地解决了。这是一个旨在解决您提到的所有问题以及更多问题的系统。

Linux 库:http://linux.die.net/man/3/uuid

此处提供更多信息:http://en.wikipedia.org/wiki/Universally_unique_identifier

关于c - gettimeofday clock_gettime 生成唯一编号的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927233/

相关文章:

c - 验证数组指针中的每个元素

linux - 您在 Cygwin 中的 GREP 有多快?

linux - 在 Linux 中查找并替换为参数

python - 使用 Numpy 数组创建唯一数组

bash - 根据域名使 URL 唯一

python - 在 Python Pandas 中查找两列的交集 -> 字符串列表

c - 如何获取十六进制数的位 AES 实现

c - 对动态分配的字符串进行排序

C字符数组初始化

android - 如何从 Android 中所有应用程序顶部的 Overlay 中获取一些事件