linux 线程异常,多线程pthread_kill出现的莫名其妙的段异常

多线程pthread_kill出现的莫名其妙的段错误

想实现:一个进程开启一个线程A,让线程A创建5个小线程abcde,线程A将任务给这5个小线程,如果某一个小线程运行结束,则在创建小线程来完成任务。但是框架却出问题了,有时候启动的时候程序就会出现段错误。有时候正常,如果正常ctrl+c,多试几次就能遇到段错误,求大神指导,代码贴上来#include 

#include 

#include 

#include 

int test_search(pthread_t* pid)

{

int pthread_kill_err;

int i;

for(i = 0; i 

{

if(!pid[i] || ESRCH == pthread_kill(pid[i], 0))

{

return i;

}

//if(!pid[i])

//return i;

//pthread_kill_err = pthread_kill(pid[i], 0);

//if(pthread_kill_err == ESRCH)

//{

pid[i]=0L;

//return i;

//}

}

return -1;

}

void* fun3()

{

;

}

void* funn(void* arg)

{

printf("come in\n");

pthread_t *tid = (pthread_t*)arg;

int j = 0;

while(1)

{

if(j<5)

{

pthread_attr_t a;

pthread_attr_init(&a);

pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);

pthread_create(&(tid[j]), &a, fun3, NULL);

pthread_attr_destroy(&a);

j++;

}

else

{

int ret = test_search(tid);

if( ret >= 0)

{

printf("ret = %d\n", ret);

pthread_attr_t a;

pthread_attr_init(&a);

pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);

pthread_create(&(tid[ret]), &a, fun3, NULL);

pthread_attr_destroy(&a);

}

}

}

}

int main()

{

pthread_t pid[5];

pthread_t pid2;

pthread_attr_t a;

pthread_attr_init(&a);

pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);

int ret = pthread_create(&pid2, &a, funn, (void*)(pid));

pthread_attr_destroy(&a);

while(1);

return 0;

}

编译gcc *.c -lpthread

------解决思路----------------------

看代码看不出问题,出现段错误的时候,core信息是什么看看

------解决思路----------------------

看代码已经很清楚了,man pthread_kill,你这样调用会找到一个运行结束的线程,但是当你找不到一个应经运行结束的线程是返回-1,这样就可能发对段错误啊。

------解决思路----------------------

不对啊,我大概瞅了眼,你的程序有几处不明白啊。

只有j++,j--在哪里啊。

------解决思路----------------------

#include 

#include 

#include 

#include 

#ifndef ARRAY_SIZE

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

#endif

void* fun3(void* param)

{

while(1);

}

int main()

{

pthread_t pid[5];

pthread_attr_t a;

pthread_attr_init(&a);

pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);

for( i = 0; i 

{

pthread_create(&pid[i], &a, fun3, NULL);

}

pthread_attr_destroy(&a);

while(1);

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值