2016-02-28 3 views
0

im, пишу программу, которая использует 8 нитей для квадратов чисел от 1 до 10000. У меня уже написана большая часть моего кода, но мой вопрос в том, как бы я определил, какие нити будут квадратными, какие числа. Я тоже слишком многопоточен. уточнить:Скважирование и многопоточность в c

Im возводит в квадрат числа от 1 до 100000, используя 8 потоков и записывая их в файл. Открытие файла и закрытие файла в порядке, но запись каждого квадрата из каждого потока является частью уравнения здесь. Это моя первая программа, использующая потоковый поэтому я предположил, что вам нужно сказать каждую нить, какое число в квадрат, чтобы

идеала я хочу:

нити 1: 1^2

резьба 2: 2^2

нить 3: 3^2

и т.д. через 10000 ...

в моей основной функции, код, который создает функцию, а затем ждет для резьбы до конца это:

for (i = 0; i < NUMBER_OF_THREADS; i++) { 
    printf("Main here. Creating thread %luu\n", i); 
    status = pthread_create(&threads[i], NULL, square_root_integer, (void *) i); 
    if (status != 0){ 
     printf("Error: pthread_create returned error code %0ld\n", status); 
     exit (-1); 
    } 
} 

for (i = 0; i < NUMBER_OF_THREADS; i++){ 
    if (pthread_join(threads[i], NULL)){ 
     printf("Thread %lu failed to join\n",i); 
    } 
} 

функция аннулируется, что потоки будут работать так:

void *square_integer(void *tid) 

Так или иначе, в главной функции мне нужно передать номер, который должен быть квадратом к функции «square_integer».

Любая помощь будет отличной, и если вам, ребята, нужна дополнительная информация, дайте мне знать!

+2

Ваше название говорит «квадратные корни»; в некоторых комментариях говорится «квадраты». Функция снова говорит «квадратные корни». Что он? Вы также упомяните 8 тем и обсудите еще 10 000 потоков - опять же, что вы делаете? –

+0

жаль, ребята, поздно, я редактировал сообщение. Im печатает числа в файл, который является кодом, который я уже написал. Im возводит в квадрат числа от 1 до 100000, используя 8 потоков. Это моя первая программа, использующая pthread, поэтому я предположил, что вам нужно рассказать каждой теме о том, какое число нужно по порядку. –

ответ

0

Имейте нить 1 выполните вычисления для чисел 1, 1 + 8, 1 + 16, 1 + 24, ...
и нить 2 для чисел 2, 2 + 8, 2 + 16, 2+ 24, ..., 2 + 8 * n, ...
и нить 3 для чисел 3, 3 + 8, 3 + 16, 3 + 24, ..., 3 + 8 * n, ...
и так далее.

Таким образом, все числа покрываются, и работа становится довольно равномерно распределенной между потоками.

Смежные вопросы