我的进程运行多个实例(进程)和多个线程,它们都写入同一个数据库。一旦提出请求,就会为要添加到专有数据库的记录生成一个唯一的请求 ID。这是我们的限制:它不能超过 9 个字符的长度,需要将 hhmmss 作为前 6 个字符。我们决定使用 ms 作为最后 3 位数字来完成 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;
}