私のプロセスは複数のインスタンス (プロセス) と複数のスレッドを実行し、それらすべてが同じデータベースに書き込みます。リクエストが発行されるとすぐに、独自のデータベースに追加されるレコードに対して一意の req id が生成されます。制限事項は次のとおりです。長さは 9 文字を超えることはできず、最初の 6 文字として hhmmss が必要です。最後の 3 桁に ms を使用して 9 文字を完成させることにしました。これはすべて gettimeofday() を使用して行っています。ただし、トラフィックの増加に伴い、1 ミリ秒の間に複数のリクエストが送信されると、衝突のインスタンスが発生するようになりました。これは、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;
}