#include #include #include #include #include "types.h" #define THREADS 6 void* gen_uuids(void* count) { FILE* random = fopen("/dev/urandom", "r"); if (!random) { perror("fopen"); return NULL; } for (long long i = 0; i <= (long long)count; ++i) { u8 uuid[16]; fread(uuid, 1, 16, random); /* set uuid version to 4 and variant to leach-salz */ uuid[6] = (uuid[6] & 0x0F) | 0x40; uuid[8] = (uuid[8] & 0x3F) | 0x80; printf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); } fclose(random); return NULL; } int main(int argc, char* argv[]) { long long count = 0; switch (argc) { case 1: count = 1; break; case 2: count = atoll(argv[1]); break; default: count = 1; break; } printf("distributing load across %d threads", THREADS); /* distributing load across threads */ long long uuids_per_thread = count / THREADS; printf("."); pthread_t threads[THREADS]; printf(".\n"); for (long long i = 0; i < THREADS; ++i) { pthread_create(&threads[i], NULL, gen_uuids, (void*)uuids_per_thread); } for (long long i = 0; i < THREADS; ++i) { pthread_join(threads[i], NULL); } return 0; }