почему не всегда генерируется рандомная строка
char* randomStrGen(int length)
{
static int inc = 2;
inc++;
srand((unsigned)GetTickCount() % 10000* (inc+inc));
static std::string charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
std::string result;
result.resize(length);
for (int i = 0; i < length; i++)
result[i] = charset[rand() % charset.length()];
char* Cresult=(char*)malloc(result.size()+1);
strcpy(Cresult, result.c_str());
return Cresult;
}
Сделал алгоритм для генерации рандомной строки,но как бы я ни старался при нескольких друг подряд идущих вызовах(в моем случае создаются 2 потока и в них вызывается),генерируется одинаковая строка.Почему,ведь я добавил в инициализатор srand число которое добавляет уникальность каждому вызову и по сути при каждом вызове srand должна инициализироваться разным числом.
Ответы (1 шт):
Автор решения: vp_arth
→ Ссылка
Попробуйте заменить
static int inc = 2;
inc++;
на
static std::atomic<int> id{0}; // #include <atomic>
int inc = id.fetch_add(1, std::memory_order_relaxed) + 1;
Или вообще уберите лишние вызовы srand, достаточно посеять seed однажды, в main.