Прежде всего позвольте мне начать, разместив код:Сегментация Неисправность PTHREAD таНос
#include <pthread.h>
#include<stdlib.h>
//64 BITS -ALL 32 bit Arch
//32 BIT - UNIX 64 bit arch
//64 BIT - WINDOWS 64 bit arch
long long sum = 0;
static enum turn
{
PING,
PONG
}def;
struct threads_util
{
pthread_t *t_id;
pthread_attr_t *attr;
void (*init_attr)(pthread_attr_t *);
};
void init_attr_fn(pthread_attr_t *attr)
{
pthread_attr_init(&attr);
}
void* sum_runner(void* arg)
{
long long* limit_ptr = (long long *) arg;
long long limit = *limit_ptr;//Derefrencing
for(long long i=0; i<=limit; i++)
sum += i;
printf("Sum is %lld \n", sum);
pthread_exit(0);
}
void ping()
{
puts("Ping");
def = PONG;
}
void pong()
{
puts("Pong");
def = PING;
}
pthread_t * all_thread(pthread_t *t_id)
{
t_id = malloc(sizeof(pthread_t));
return t_id;
}
int main(int argc, char **argv)
{
if(argc<2)
{
puts("Usage ./objFile <num 1> <num 2> .. <num n>");
exit(1);
}
int args = argc-1;
long long limit = atoll(argv[1]);
def = PING;
struct threads_util *threads[args];
for (int i=0; i<args; i++)
threads[i]->t_id = all_thread(threads[i]->t_id);
puts("In");
for(int i=0; i<args; i++)
{
threads[i]->init_attr = init_attr_fn;
threads[i]->init_attr(threads[i]->attr);
pthread_create(threads[i]->t_id,threads[i]->attr,sum_runner,&limit);
}
//Begin -Main Functions
for(int i=0; i<= 10; i++)
{
if(def == PING)
ping();
else if(def == PONG)
pong();
else
puts("UNKOWN PI-PO");
}
//End - Main Functions
for(int i=0; i<args; i++)
{
pthread_join(threads[i]->t_id,NULL);
}
}
Вы можете увидеть у меня есть путы («In»), в главной функции, только после того, как цикл, когда я называю all_thread аргументы раз. Проблема, вызванная функцией argc с циклом for в соответствии с моими навыками отладки, является проблемой. А также до того, как мы выполнили всю стратегию распределения, у меня возникла проблема с вызовом функции потока, что, конечно, привело к ошибке сегментации. threads[i]->init_attr(threads[i]->attr);
. Помощь будет очень оценена.
Хорошо им пройти эту проблему .. Вы можете зайти на чат http://chat.stackoverflow.com/rooms/54304/c? прямо сейчас у меня проблема с инициализацией атрибутов: threads [i] -> init_attr (threads [i] -> attr); – amanuel2
Что такое 'pthread_attr_init' – 4386427
Кажется, что' threads [i] -> attr' не инициализирован - возможно, вы должны просто инициализировать его до 'NULL' – 4386427