почему не всегда генерируется рандомная строка

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.

→ Ссылка