Я пишу программу с потоками для моего класса операционных систем. Он должен вычислить n значений ряда Фибоначчи в одном потоке и вывести результаты в основном потоке. Я продолжаю получать ошибку сегментации, когда n> 10. Из моего тестирования я обнаружил, что функция compute_fibonacci выполняется правильно, но по какой-то причине она никогда не попадает в цикл for в main. Вот код с утверждениями cout, где проблема. Я ценю любую помощь в этом.
#include <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
void *compute_fibonacci( void * );
int *num;
using namespace std;
int main( int argc, char *argv[] )
{
int i;
int limit;
pthread_t pthread;
pthread_attr_t attr;
pthread_attr_init( &attr );
pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
num = new int(atoi(argv[1]));
limit = atoi(argv[1]);
pthread_create(&pthread, NULL, compute_fibonacci, (void *) limit);
pthread_join(pthread, NULL);
cout << "This line is not executed" << endl;
for (i = 0; i < limit; i++) {
cout << num[i] << endl;
}
return 0;
}
void *compute_fibonacci( void * limit)
{
int i;
for (i = 0; i < (int)limit; i++) {
if (i == 0) {
num[0] = 0;
}
else if (i == 1) {
num[1] = 1;
}
else {
num[i] = num[i - 1] + num[i - 2];
}
}
cout << "This line is executed" << endl;
pthread_exit(0);
}