您的位置:首页 > 运维架构 > Linux

Linux下多线程编程遇到的一些问题

2016-03-21 10:35 435 查看
今天在学习了Linux的多线程编程的基础的知识点。于是就试着做了一个简单的Demo。本以为会得到预期的结果。不成想却遇到了意想不到的问题。

代码展示

我的C 代码很简单,就是一个简单的示例程序,如下:

#include <stdio.h>
#include <stdlib.h>
#include<pthread.h>

int sum  ;
void* runner(void *param);

int main( int argc, char*argv[])
{
pthread_t tid;
pthread_attr_t attr;

if(argc != 2){
fprintf(stderr,"usage : a.out<integer value>\n");
return -1;
}

if(atoi(argv[1])<0){
fprintf(stderr,"%d must be >= 0 \n",atoi(argv[1]));
return -1;
}

pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,argv[1]);
pthread_join(tid,NULL);

printf("Sum = :%d\n",sum);
}

void* runner(void *param){
int i , upper = atoi(param);
sum = 0 ;
for(i = 1; i < upper ; i++){
sum += i ;
}
pthread_exit(0);
}


初遇问题

码完代码我就迫不及待的想要进行编译了,然而系统却提示给了我这样的问题。

g++  -o bin/Debug/PThreadTest obj/Debug/main.o
obj/Debug/main.o:在函数‘main’中:

/home/mark/Code/C/PThreadTest/main.c:25:对‘pthread_create’未定义的引用
/home/mark/Code/C/PThreadTest/main.c:26:对‘pthread_join’未定义的引用

collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))


尝试着解决问题

看到了这样的提示,感觉有可能是Complier的问题吧。一开始我也是不理解到底是为什么会这样。然后我就在网上搜索了一下这些个关键字。网上的答案不一而足,说什么的都有。对于咱这种菜鸟级的入门新手而言,只能去尝试人家的解决方案。所以结果可想而知了,要么成功了,要么失败了。而一般后者出现的概率比较的多。

第一种方式:改变编译器的路径,到setting–>complier–>link complier.然而这并没有解决我的问题,编译过之后,仍旧还是这搁错误

第二种方式:网上说Pthread并不是Linux的默认的库,连接时需要使用库libpthread.a。也就是在编译的时候 添加在*.c 文件的后面。这个方法在我的项目中,竟然成功的运行了。
gcc  main.c  -lpthread  -o Main


总结

在遇到了这个问题的时候,从一开始的摸不着头脑,到慢慢的摸索着成功的道路,最后解决问题。我想这就是最基本的解决问题的方式吧。不是说解决问题了,就够了。而是在解决问题的过程中进行不断的思考,总结。这样在今后遇到类似的问题的时候,我们才能更加高效的区解决问题。

编程之路比较的坎坷,脚踏实地的思考,才能最快的解决问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: