Я думаю, что вы ищете rand_r (), который явно принимает текущее состояние RNG в качестве параметра.Тогда каждый поток должен иметь свою собственную копию начальных данных (хотите ли вы, чтобы каждый поток начинался с одного и того же начального или другого, зависит от того, что вы делаете, здесь вы хотите, чтобы они были разными, или вы получите ту же строкуопять и опять).Здесь обсуждается rand_r () и потокобезопасность: является ли rand_r реальным потокобезопасным? .
Итак, вы хотите, чтобы каждый поток начинал с начального числа с номера потокачто, вероятно, не то, что вам нужно, поскольку он будет давать одну и ту же матрицу каждый раз, когда вы запускаете с одинаковым количеством потоков, но просто в качестве примера):
#pragma omp parallel default(none) shared(matrix, cols)
{
int i= omp_get_thread_num();
unsigned int myseed = i;
for(int j=0; j<cols; j++)
matrix[i][j]= rand_r(&myseed)%1000 + (float)(rand_r(&myseed)%100)/(float)(rand_r(&myseed)%1000 + 1);
}
Теперь каждый поток изменяет свое собственное состояниеисключительно (rand_r () - чистая функция) и вы должны быть дома свободны.